CWE ID: 88
Name: Improper Neutralization of Argument Delimiters in a Command (‘Argument Injection’)
Das Produkt konstruiert einen String für einen Befehl, der von einer separaten Komponente in einer anderen Kontrollsphäre ausgeführt werden soll. Dabei werden die beabsichtigten Argumente, Optionen oder Switches innerhalb dieses Befehlsstrings jedoch nicht korrekt abgegrenzt.
Effektivität: High
Beschreibung: Soweit möglich, sollte man vermeiden, einen einzelnen String zu erstellen, der den Befehl und seine Argumente enthält. Einige Programmiersprachen oder Frameworks bieten Funktionen, die die Angabe unabhängiger Argumente unterstützen, beispielsweise als ein Array, welches automatisch die korrekte Quoting oder Escaping beim Aufbau des Befehls durchführt. Beispielsweise kann in PHP escapeshellarg()
verwendet werden, um ein einzelnes Argument für system()
zu escapen, oder exec()
kann mit einem Array von Argumenten aufgerufen werden. In C kann Code oft von der Verwendung von system()
– welches einen einzelnen String akzeptiert – zu exec()
refaktorisiert werden, welches separate Funktionsargumente für jeden Parameter erfordert.
Effektivität: Unknown
Beschreibung: Es ist entscheidend, alle potenziellen Bereiche zu verstehen, in denen nicht vertrauenswürdige Eingaben in Ihr Produkt gelangen können: Parameter oder Argumente, Cookies, alles, was aus dem Netzwerk gelesen wird, Umgebungsvariablen, Request-Header sowie den Inhalt, URL-Komponenten, E-Mails, Dateien, Datenbanken und alle externen Systeme, die Daten an die Anwendung liefern. Führen Sie Input Validation an klar definierten Interfaces durch.
Effektivität: Unknown
Beschreibung: Konvertieren Sie Ihre Eingabe direkt in den erwarteten Datentyp, beispielsweise mithilfe einer Konvertierungsfunktion, die einen String in eine Zahl übersetzt. Nachdem die Konvertierung in den erwarteten Datentyp erfolgt ist, stellen Sie sicher, dass die Werte der Eingabe innerhalb des erwarteten Wertebereichs liegen und dass Mehrfeld-Konsistenzen eingehalten werden.
Effektivität: Unknown
Beschreibung: Bei der Datenübertragung zwischen Komponenten ist sicherzustellen, dass beide Komponenten dieselbe Zeichenkodierung verwenden. Stellen Sie sicher, dass die korrekte Kodierung an jeder Schnittstelle angewendet wird. Legen Sie explizit die verwendete Kodierung fest, sofern das verwendete Protokoll dies zulässt.
Effektivität: Unknown
Beschreibung: Wenn Ihre Anwendung Daten aus mehreren Quellen kombiniert, führen Sie die Validierung erst nach der Zusammenführung der Quellen durch. Einzelne Datenelemente können zwar die Validierungsschritte einzeln bestehen, verstoßen aber möglicherweise gegen die beabsichtigten Einschränkungen, nachdem sie kombiniert wurden.
Effektivität: Unknown
Beschreibung: Nutzen Sie automatisierte Static Analysis Tools, die auf diese Art von Schwachstellen abzielen. Viele moderne Techniken verwenden Data Flow Analysis, um die Anzahl der False Positives zu minimieren. Dies ist jedoch keine perfekte Lösung, da eine 100%ige Genauigkeit und Abdeckung nicht realisierbar sind.
Effektivität: Unknown
Beschreibung: Setzen Sie dynamische Tools und Techniken ein, die mit dem Produkt interagieren und große Testsuiten mit vielfältigen Inputs verwenden, wie beispielsweise Fuzz Testing (Fuzzing), Robustness Testing und Fault Injection. Der Betrieb des Produkts kann sich verlangsamen, aber es sollte nicht instabil werden, abstürzen oder falsche Results generieren.