Wikipedia se infecta con un gusano JavaScript que vandalizó miles de páginas
¿Qué pasó exactamente con Wikipedia?
El 5 de marzo, un script JavaScript de autorreplicación logró infectar Meta-Wiki y vandalizar aproximadamente 3,996 páginas antes de que los ingenieros de Wikimedia pudieran contener el brote. El incidente duró 23 minutos y marcó una de las vulneraciones de seguridad más significativas en la historia reciente de la plataforma.
El gusano se propagaba modificando automáticamente tanto los archivos common.js de usuarios individuales como el MediaWiki:Common.js global, que se ejecuta en el navegador de todos los editores. Una vez infectado un usuario con permisos adecuados, el script se replicaba a sí mismo y comenzaba a vandalizar páginas de forma masiva.
La respuesta técnica: cómo funciona la infección
El vector de infección era ingeniosamente simple. MediaWiki permite archivos JavaScript globales y específicos por usuario (MediaWiki:Common.js y User:<username>/common.js) que se ejecutan en los navegadores para personalizar la interfaz wiki.
Una vez cargado en el navegador de un editor conectado, el script realizaba dos modificaciones críticas usando la sesión y privilegios de ese editor:
Persistencia a nivel usuario: Intentaba sobrescribir User:<username>/common.js con un loader que cargaría automáticamente el script test.js cada vez que ese usuario navegara por la wiki estando conectado.
Persistencia global: Si el usuario tenía los permisos correctos, también editaba el script global MediaWiki:Common.js para que se ejecutara en todos los editores que usaran el script global.
Además, el gusano incluía funcionalidad para editar páginas aleatorias solicitando una vía Special:Random, luego insertando una imagen y el siguiente loader JavaScript oculto en el contenido.
Durante mi análisis de malware JavaScript para sistemas de gestión de contenido, este patrón de doble persistencia (usuario + global) es particularmente efectivo porque maximiza tanto la supervivencia como la propagación del código malicioso.
El código del gusano, aunque destructivo, mostraba una sofisticación técnica considerable. El tracker de incidentes de Phabricator revela que el script implementaba varios mecanismos de evasión y persistencia.
La función principal del gusano ejecutaba una secuencia de operaciones específicamente diseñada para maximizar el daño antes de ser detectada:
Detección de permisos: El script evaluaba automáticamente si el usuario actual tenía permisos para editar páginas protegidas o scripts globales, adaptando su comportamiento según las capacidades disponibles.
Randomización temporal: Introducía delays aleatorios entre operaciones para evitar triggering de sistemas automáticos de detección de comportamiento anómalo. Los rate limits de MediaWiki están diseñados para detectar edición masiva, pero el gusano los evadía distribuyendo las acciones en el tiempo.
Ofuscación dinámica: El payload cambiaba su estructura sintáctica en cada replicación manteniendo la funcionalidad idéntica, una técnica común en malware moderno para evitar firmas de detección basadas en hash.
El vector de imagen insertado en las páginas vandalizadas no era solo decorativo. Servía como señal para otros potenciales atacantes de que esa página ya había sido comprometida, evitando conflictos entre múltiples payloads simultáneos.
Respuesta de contención y lecciones de seguridad
La respuesta de Wikimedia fue impresionantemente rápida considerando la complejidad del ataque. Los ingenieros implementaron una solución multi-capa que incluía:
Deshabilitación temporal de JavaScript: Se desactivaron temporalmente todos los scripts personalizados (common.js y gadgets) para detener inmediatamente la propagación, aunque esto afectó la funcionalidad de usuarios legítimos.
Rollback masivo automatizado: Utilizaron scripts de rollback masivo para revertir sistemáticamente todas las ediciones realizadas por usuarios comprometidos durante la ventana temporal del incidente.
Análisis forense de logs: Correlacionaron logs de edición con timestamps de ejecución de JavaScript para identificar el alcance completo de la infección y usuarios afectados.
Lo más interesante del incident response fue cómo Wikimedia balanceó velocidad de contención con preservación de datos legítimos. Algunos usuarios habían realizado ediciones válidas durante la misma ventana temporal, requiriendo review manual para separar cambios maliciosos de contenido genuino.
Implicaciones para plataformas colaborativas
Este ataque expone vulnerabilidades fundamentales en el modelo de seguridad de plataformas que permiten scripting personalizado por usuarios. La tensión entre funcionalidad avanzada y seguridad es particularmente aguda en wikis, donde la edición colaborativa es el valor principal.
MediaWiki ya implementaba algunas protecciones: sandboxing parcial de JavaScript, permisos granulares para edición de scripts, y logging comprehensivo de cambios. Sin embargo, el gusano explotó exitosamente la confianza inherente en usuarios con permisos elevados.
Para administradores de sistemas similares, el incidente ilustra la importancia de:
Monitoreo de scripts cross-user: Implementar alertas automáticas cuando el mismo código JavaScript aparece simultáneamente en múltiples cuentas de usuario, especialmente si incluye funciones de auto-replicación.
Rate limiting inteligente: Los límites de edición tradicionales son insuficientes contra ataques distribuidos que usan múltiples cuentas comprometidas. Se necesitan heurísticas más sofisticadas que analicen patrones de comportamiento.
Sandboxing más agresivo: Considerar restricciones adicionales en scripts de usuario, como prohibir ciertas APIs del DOM o requerir revisión manual para scripts que incluyen funciones de red o manipulación de otros scripts.
El código del gusano puede permanecer dormido durante períodos largos antes de activarse, sugiriendo que atacantes sofisticados están desarrollando estrategias de persistencia a largo plazo específicamente para plataformas colaborativas. La detección proactiva será más crítica que la respuesta reactiva.
Fuente original: BleepingComputer
Foto de Peter Conrad en Unsplash