Command Injection

Was ist Command Injection?

Command Injection ist ein Angriff, bei dem das Ziel die Ausf├╝hrung beliebiger Befehle auf dem Host-Betriebssystem ├╝ber eine anf├Ąllige Anwendung ist. Command Injection Angriffe sind m├Âglich, wenn eine Anwendung unsichere Daten (Formulare, Cookies, HTTP-Header usw.) an das zugrundeliegende Betriebssystem┬á├╝bergibt. Bei diesem Angriff werden die vom Angreifer bereitgestellten Betriebssystembefehle normalerweise mit den Berechtigungen der verwundbaren Anwendung ausgef├╝hrt. Command Injection Angriffe sind weitgehend auf unzureichende Eingabevalidierung zur├╝ckzuf├╝hren.

Beschreibung

Die Software erstellt einen kompletten oder einen Teil eines Betriebssystembefehls unter Verwendung von extern beeinflussten Eingaben von einer vorgelagerten Komponente. Spezielle Elemente werden aber nicht oder fehlerhaft neutralisiert, welche den beabsichtigten Betriebssystembefehl modifizieren k├Ânnten, wenn dieser an eine nachgeordnete Komponente gesendet wird. Dadurch k├Ânnen Angreifer unerwartete, gef├Ąhrliche Befehle direkt auf dem Betriebssystem ausf├╝hren.

Diese Schwachstelle kann zu einer Sicherheitsanf├Ąlligkeit in Umgebungen f├╝hren, in denen der Angreifer keinen direkten Zugriff auf das Betriebssystem hat, beispielsweise in Webanwendungen. Wenn die Schw├Ąche in einem privilegierten Programm auftritt, kann der Angreifer alternativ Befehle angeben, auf die normalerweise nicht zugegriffen werden kann, oder alternative Befehle mit Berechtigungen aufrufen, die der Angreifer nicht hat.

Das Problem wird noch versch├Ąrft, wenn der gef├Ąhrdete Prozess nicht dem Prinzip der geringsten Privilegien folgt, da die vom Angreifer gesteuerten Befehle m├Âglicherweise mit speziellen Systemprivilegien ausgef├╝hrt werden, die den Schaden erh├Âhen.

Tipp

├ťberpr├╝fen Sie die Sicherheit Ihrer Website mit unserem kostenlosen Security Crawler oder mit der OSG Performance Suite Free Version.

L├Âsung

Stellen Sie f├╝r alle Sicherheitspr├╝fungen, die auf der Clientseite durchgef├╝hrt werden, sicher, dass diese Pr├╝fungen auf der Serverseite doppelt vorhanden sind. Angreifer k├Ânnen die clientseitigen Pr├╝fungen umgehen, indem sie Werte ├Ąndern, nachdem die Pr├╝fungen ausgef├╝hrt wurden, oder indem der Client so ge├Ąndert wird, dass die clientseitigen Pr├╝fungen vollst├Ąndig entfernt werden. Diese ge├Ąnderten Werte werden dann an den Server ├╝bermittelt.

  • Die Verwendung dynamisch generierter Abfragezeichenfolgen, Codes oder Befehle, die Steuerelement und Daten miteinander kombinieren, ist riskant. Manchmal kann dies jedoch unvermeidlich sein.
  • Zitieren Sie Argumente ordnungsgem├Ą├č und entfernen Sie alle Sonderzeichen innerhalb dieser Argumente. Der konservativste Ansatz besteht darin, alle Zeichen zu entgehen oder zu filtern, die keine extrem strenge Whitelist passieren (z. B. alles, was nicht alphanumerisch oder Leerzeichen ist). Seien Sie vorsichtig bei der Argumentation.
  • Wenn das auszuf├╝hrende Programm die Angabe von Argumenten innerhalb einer Eingabedatei oder einer Standardeingabe zul├Ąsst, sollten Sie diesen Modus verwenden, um Argumente anstelle der Befehlszeile zu ├╝bergeben.

Wenn der Satz akzeptabler Objekte wie Dateinamen oder URLs begrenzt oder bekannt ist, erstellen Sie eine Zuordnung von einem Satz fester Eingabewerte (z.B. numerische IDs) zu den tats├Ąchlichen Dateinamen oder URLs, und lehnen Sie alle anderen Eingaben ab.

  • Stellen Sie sicher, dass die Fehlermeldungen nur minimale Details enthalten, die f├╝r die beabsichtigte Zielgruppe n├╝tzlich sind, und f├╝r niemanden anderen. Die Nachrichten m├╝ssen das Gleichgewicht zwischen zu kryptisch und nicht kryptisch genug finden. Sie sollten nicht unbedingt die Methoden offenlegen, mit denen der Fehler ermittelt wurde.
  • Vermeiden Sie es, hochsensible Informationen wie Passw├Ârter in irgendeiner Form aufzuzeichnen.
  • Vermeiden Sie inkonsistente Nachrichten, bei denen ein Angreifer versehentlich ├╝ber den internen Status informiert wird, z.B. ob ein Benutzername g├╝ltig ist oder nicht.
  • Im Kontext der OS-Befehlseingabe k├Ânnen an den Benutzer zur├╝ckgegebene Fehlerinformationen Aufschluss dar├╝ber geben, ob ein OS-Befehl ausgef├╝hrt wird und m├Âglicherweise welcher Befehl verwendet wird.

F├╝hren Sie Ihren Code mit den niedrigsten Berechtigungen aus, die zum Ausf├╝hren der erforderlichen Aufgaben erforderlich sind. Erstellen Sie nach M├Âglichkeit isolierte Konten mit eingeschr├Ąnkten Berechtigungen, die nur f├╝r eine einzelne Aufgabe verwendet werden. Auf diese Weise kann ein Angreifer bei einem erfolgreichen Angriff nicht sofort auf die ├╝brige Software oder deren Umgebung zugreifen. Beispielsweise m├╝ssen Datenbankanwendungen, insbesondere im t├Ąglichen Betrieb, selten als Datenbankadministrator ausgef├╝hrt werden.

  • Wenn Sie PHP verwenden, konfigurieren Sie die Anwendung so, dass sie register_globals nicht verwendet. Entwickeln Sie die Anwendung w├Ąhrend der Implementierung so, dass sie nicht auf diese Funktion angewiesen ist, sondern achten Sie auf die Implementierung einer register_globals-Emulation, die Schw├Ąchen und ├Ąhnlichen Problemen unterliegt.

Datenbanklink zur Schwachstelle

https://cwe.mitre.org/data/definitions/78.html 


Sie haben noch Fragen?

Kontaktieren Sie uns

Kostenloser SEO-Check der OSG


Weitere Inhalte