
Private Forschung und Validierung zur Wiederherstellung von Datei-Drag-and-Drop in WebKitGTK (CVE-2025-13947 Nachuntersuchung)
Forschungs- und CI-Notizbuch zur Wiederherstellung von vertrauenswürdigem Datei-Drag-and-Drop auf WebKitGTK und WPE nach CVE-2025-13947.
CVE-2025-13947 (WSA-2025-0009, GHSA-j77f-3hf7-7rvg) ermöglichte es Webinhalten, lokale Dateiinhalte über Drag-and-Drop auf WebKitGTK zu lesen. Der Upstream-Fix, bugs.webkit.org 303434, war eine breit angelegte Deaktivierung: allowsFileAccess() gibt auf allen Nicht-Cocoa-Ports false zurück, sodass dataTransfer.files bei jedem Drop leer ist – auch wenn ein Benutzer eine eigene Datei aus dem Dateimanager auf ein Upload-Ziel zieht. Epiphany-artige Browser und eingebettete WebKitGTK-Upload-Oberflächen verloren die Funktion. Bug 320301 ist ein Endnutzer-Bericht derselben Regression.
Vertrauen an der Plattformgrenze aufteilen, anstatt die Funktion zu deaktivieren. Ein Commit auf dem Engine-Fork, sirredbeard/WebKit-Branch gtk-dnd-file-access-reenable:
SelectionData::setURIList() fördert uri-list-Zeilen nicht mehr zu Dateinamen. Datei-Grants stammen nur noch von den expliziten Settern, die von den beiden UIProcess-Drop-Zielen und der IPC-Dekodierung verwendet werden.allowsFileAccess() gibt nur bei echten Datei-Drags auf GTK und WPE true zurück.GdkFileList gegenüber einer parallelen uri-list, wobei dieselbe Datei-URI-Host-Prüfung auf beide Pfade angewendet wird.file://-Zeilen und exportieren niemals eine GdkFileList.file://host/path wird abgelehnt, es sei denn, der Host ist leer oder localhost.filenames überquert IPC als eigenes Feld, und die Kopie im Webprozess wird beim Drag-Start geleert.Web-erstellte Drag-Quellen erhalten keine Dateiinhalte. Benutzer-Drops externer Dateien gewähren dataTransfer.files. Einfügen bleibt deaktiviert, bis eine Zwischenablage-Prüfung erfolgt.
Am 2026-09-03 upstream eingereicht.
2fd5c6cb7ea7, Tree bc272e2a5ebe, auf aktuellem Upstream-maind364838bce86 dokumentiert; ein erneuter Lauf auf dem aktuellen Tree steht ausfindings/findings/upstream-strategy.mdfindings/testing-plan.mdbug_report.md.github/copilot-instructions.mdEin einzelner squashed Commit auf main, keine anderen Branches. Die Verpackungs- und GUI-Validierungsmechanik, die dem Engine-only-Ansatz vorausging, wurde entfernt; findings/ bewahrt die Schlussfolgerungen in Prosa.