
Investigación y validación privada para la restauración de archivos DnD en WebKitGTK (seguimiento de CVE-2025-13947)
Cuaderno de investigación y CI para restaurar el arrastrar y soltar confiable de archivos en WebKitGTK y WPE tras CVE-2025-13947.
CVE-2025-13947 (WSA-2025-0009, GHSA-j77f-3hf7-7rvg) permitía que el contenido web leyera archivos locales mediante arrastrar y soltar en WebKitGTK. La corrección upstream, bugs.webkit.org 303434, fue una desactivación amplia: allowsFileAccess() devuelve false en todos los puertos no-Cocoa, por lo que dataTransfer.files está vacío en cada soltado, incluido cuando un usuario arrastra su propio archivo desde el gestor de archivos hasta un destino de subida. Los navegadores estilo Epiphany y las interfaces de subida embebidas en WebKitGTK perdieron la funcionalidad. El bug 320301 es un informe de usuario final sobre la misma regresión.
Dividir la confianza en el límite de la plataforma en lugar de desactivar la funcionalidad. Un único commit en el fork del motor, rama sirredbeard/WebKit gtk-dnd-file-access-reenable:
SelectionData::setURIList() ya no promueve líneas de uri-list a nombres de archivo. Las concesiones de archivos provienen únicamente de los setters explícitos utilizados por los dos destinos de soltado de UIProcess y la decodificación IPC.allowsFileAccess() devuelve true solo para arrastres de archivos reales en GTK y WPE.GdkFileList proporcionado por el portal prevalece sobre una uri-list paralela, aplicándose la misma comprobación de host de URI de archivo a ambas rutas.file:// y nunca exportan un GdkFileList.file://host/path se rechaza a menos que el host esté vacío o sea localhost.filenames cruza IPC como campo propio y la copia del proceso web se limpia al iniciar el arrastre.Las fuentes de arrastre creadas por web no obtienen contenido de archivos. Los soltados de archivos externos por parte del usuario conceden dataTransfer.files. El pegado permanece desactivado pendiente de una auditoría del portapapeles.
Presentado upstream el 2026-09-03.
2fd5c6cb7ea7, árbol bc272e2a5ebe, sobre el main upstream actuald364838bce86; se debe una reejecución en el árbol actualfindings/findings/upstream-strategy.mdfindings/testing-plan.mdbug_report.md.github/copilot-instructions.mdUn único commit aplastado en main, sin otras ramas. La maquinaria de empaquetado y validación GUI que precedió al enfoque solo-motor fue eliminada; findings/ conserva las conclusiones en prosa.