
OpenSIS SQL-Injection
OpenSIS Authentifizierte SQL-Injection
Es besteht eine SQL-Injection-Schwachstelle in Ajax.php, ForWindow.php, ForExport.php, Modules.php, functions/HackingLogFnc.php. Dieser Befund betrifft OpenSIS Community Edition 9.1 bis 8.0 und möglicherweise niedrigere Versionen.
In einem der Beispiele, Ajax.php, ist zu sehen, dass IPs protokolliert und in die Datenbank eingefügt werden können, wenn bösartige Aktivitäten festgestellt werden. Ein wichtiger Punkt ist, dass wenn der „X-Forwarded-For“-Header gesendet wird, die Anwendung diesen Wert anstelle des $_SERVER['REMOTE_ADDR']-Werts verwendet. Da $ip direkt in die SQL-Anweisung ohne jegliche Bereinigung eingefügt wird, ist eine SQL-Injection möglich.

Im folgenden Proof of Concept führte die Injektion des Payloads ' AND SLEEP(7) AND '1'='1 dazu, dass die Anwendung 7 Sekunden lang pausierte, was darauf hindeutet, dass die SQL-Injection erfolgreich war.

Die Überprüfung des Datenbankprotokolls bestätigt diese Schwachstelle weiter.

Schließlich bestätigte die Verwendung von SQLMap, einem automatisierten SQL-Injection-Tool, die Schwachstelle.

Die betroffenen Codezeilen hängen den Wert von $_SERVER['HTTP_X_FORWARDED_FOR'] direkt in eine SQL-Anweisung ein.
• Ajax.php (Zeile 260 bis 275) • Modules.php (Zeile 1005 bis 1023) • ForExport.php (Zeile 135 bis 147) • ForWindow.php (Zeile 124 bis 136) • functions/HackingLogFnc.php (Zeile 47 bis 68)
• Anstatt SQL-Abfragen dynamisch zu konstruieren, indem Benutzereingaben direkt in die SQL-Anweisung eingefügt werden, sollten parametrisierte Abfragen (auch als vorbereitete Anweisungen bekannt) verwendet werden. Parametrisierte Abfragen trennen SQL-Code von Benutzereingaben und verringern so das Risiko von SQL-Injection-Angriffen erheblich.
• Implementieren Sie robuste Eingabevalidierungs- und Bereinigungstechniken, um sicherzustellen, dass benutzergelieferte Daten den erwarteten Formaten entsprechen und keinen schädlichen SQL-Code enthalten. Validieren Sie Eingabedatentypen, -länge und -format und bereinigen Sie Eingaben durch Escaping von Sonderzeichen oder Verwendung von Whitelists, um nur bestimmte Zeichen oder Muster zuzulassen.
• Verwenden Sie $_SERVER[‘HTTP_X_FORWARDED_FOR’] nicht zum Protokollieren von IPs.