
There is a path injection vulnerability in OpenPLC-v3, which arises from the program not performing any validity checks on the file path parameters passed in from the command line. Attackers can read any readable file by constructing malicious paths, posing a risk of information leakage.
Es gibt eine Pfad-Injection-Schwachstelle in OpenPLC-v3, die dadurch entsteht, dass das Programm keine Gültigkeitsprüfungen an den von der Kommandozeile übergebenen Dateipfadparametern durchführt. Angreifer können durch die Konstruktion bösartiger Pfade jede lesbare Datei auslesen, was ein Risiko der Informationspreisgabe darstellt.
Unzureichende Eingabevalidierung (Pfad-Injection)
Informationspreisgabe (Beliebiger Dateizugriff)
Das aus glue_generator.cpp kompilierte Binärprogramm enthält eine Schwachstelle für beliebiges Dateilesen, die durch unzureichende Validierung von benutzerbereitgestellten Dateipfaden verursacht wird.
Ein Angreifer kann beim Ausführen des Programms eine beliebige Datei als Eingabeargument angeben (z.B. /etc/passwd). Die Anwendung liest daraufhin die Datei zeilenweise, parst den Inhalt und gibt die geparsten Daten direkt auf der Konsole mittels cout aus. Dabei wird keinerlei Validierung durchgeführt bezüglich:
Infolgedessen können Angreifer jede Datei lesen, auf die der Privilegkontext des laufenden Prozesses Zugriff hat, was zur Preisgabe sensibler Informationen führt.
1.Der Angreifer kann die anfällige Binärdatei ausführen.
2.Das laufende Benutzerkonto hat Leseberechtigung für die Zieldatei.
Eine erfolgreiche Ausnutzung kann sensible Systeminformationen offenlegen, einschließlich, aber nicht beschränkt auf:
Diese Informationen können eine weitere Privilegieneskalation oder seitliche Bewegung erleichtern.
In glue_generator.cpp verwendet das Programm zwei String-Arrays, varName und varType, um geparste Dateiinhalte zu verarbeiten und auf der Kommandozeile auszugeben.
Während des Parsens erwartet das Programm ein bestimmtes Zeilenformat:
(<varType>,<varName>,
Konkret:
( und dem ersten , wird varType zugewiesen;, wird varName zugewiesen.Es wird keine Validierung des Quellpfades oder der Legitimität der geparsten Daten durchgeführt.
Schritt 1: Erstellen einer Testdatei
Erstellen Sie eine Datei namens test.txt mit folgendem Inhalt:
(aaaaaaaa,123,
Schritt 2: Ausführen des anfälligen Programms
Führen Sie den folgenden Befehl aus:
./glue_generator ./test.txt whatever.cpp
Das Programm wird den Inhalt parsen und die extrahierten Werte auf der Konsole ausgeben.
Schritt 3: Beliebiges Dateilesen
Wenn ein Angreifer eine sensible Datei (z.B. /etc/passwd) so ändern oder kontrollieren kann, dass sie Daten im erforderlichen Format enthält:
(aaaaaaaa,123,
wird das anfällige Programm die entsprechenden Inhalte aus der Datei parsen und ausgeben.
Bei sensiblen Dateien kann jede Zeile, die dem folgenden Muster entspricht, offengelegt werden:
(<content1>,<content2>,
Die Menge der durchgesickerten Informationen hängt ab von:
Die Schwachstelle wird verursacht durch:
1.Fehlende Validierung von benutzergesteuerten Dateipfaden.
2.Unsichere Parsing-Logik, die auf beliebige Dateien angewendet wird.
3.Direkte Konsolenausgabe geparster Inhalte ohne Autorisierungsprüfungen.
4.Fehlen von Einschränkungen für zugängliche Dateipfade.
Um die Schwachstelle zu entschärfen: