WordPress Core – Informational – All known Versions – Weak Hashing Algorithm
All known versions of WordPress core use a weak MD5-based password hashing algorithm, which makes it easier for attackers to determine cleartext values by leveraging access to the hash values. NOTE: the approach to changing this may not be fully compatible with certain use cases, such as migration of a WordPress site from a web host that uses a recent PHP version to a different web host that uses PHP 5.2. These use cases are plausible (but very unlikely) based on statistics showing widespread deployment of WordPress with obsolete PHP versions.
Núcleo de WordPress – Informativo – Todas las versiones conocidas – Algoritmo de Hashing Débil
Todas las versiones conocidas del núcleo de WordPress utilizan un algoritmo de hashing de contraseñas basado en MD5, el cual facilita a los atacantes determinar los valores en texto claro aprovechando el acceso a los valores de hash. NOTA: el enfoque para cambiar esto puede no ser completamente compatible con ciertos casos de uso, como la migración de un sitio de WordPress desde un host web que utiliza una versión reciente de PHP a un host web diferente que utiliza PHP 5.2. Estos casos de uso son plausibles (pero muy poco probables) basados en estadísticas que muestran una amplia implementación de WordPress con versiones obsoletas de PHP.
La solución al problema del uso de un algoritmo de hashing débil (MD5) para las contraseñas en WordPress involucra varias estrategias que pueden ser implementadas a nivel de administración del sitio y desarrollo
1. Actualizar WordPress y PHP
Asegúrate de que tanto WordPress como la versión de PHP estén actualizados. Las versiones más recientes de PHP ofrecen soporte para algoritmos de hashing más seguros, como bcrypt, que es considerablemente más robusto que MD5.
2. Usar Plugins de Seguridad
Existen plugins de seguridad para WordPress que permiten mejorar el hashing de las contraseñas. Por ejemplo, plugins como «Wordfence Security» ofrecen mejoras de seguridad adicionales y pueden ayudar a mitigar riesgos al utilizar algoritmos más fuertes para el hashing de contraseñas.
3. Personalizar la Función de Hashing de Contraseñas
Si tienes la capacidad técnica y acceso al código, puedes personalizar la función de hashing de contraseñas de WordPress. WordPress utiliza la API PasswordHash
para manejar el hashing de contraseñas, y es posible reemplazar el uso de MD5 por algoritmos más seguros como bcrypt o Argon2 (disponible en versiones recientes de PHP).
if ( !function_exists('wp_set_password') ) {
function wp_set_password( $password, $user_id ) {
global $wpdb;
$hash = password_hash($password, PASSWORD_DEFAULT);
$wpdb->update($wpdb->users, array('user_pass' => $hash), array('ID' => $user_id));
wp_cache_delete($user_id, 'users');
}
}
Este fragmento de código es un ejemplo de cómo podrías comenzar a personalizar la función de hashing. Sin embargo, es importante realizar pruebas exhaustivas y considerar la compatibilidad con plugins existentes y otras funcionalidades de WordPress.
WordPress Core – All Known Versions – Cleartext Storage of wp_signups.activation_key
All known versions of WordPress Core store cleartext wp_signups.activation_key values (but stores the analogous wp_users.user_activation_key values as hashes), which might make it easier for remote attackers to hijack unactivated user accounts by leveraging database read access (such as access gained through an unspecified SQL injection vulnerability).
Todas las versiones conocidas del Núcleo de WordPress almacenan los valores de wp_signups.activation_key en texto claro (pero almacenan los valores análogos de wp_users.user_activation_key como hashes), lo cual podría facilitar a los atacantes remotos el secuestro de cuentas de usuario no activadas aprovechando el acceso de lectura a la base de datos (como el acceso obtenido a través de una vulnerabilidad de inyección SQL no especificada).
Para abordar el problema del almacenamiento en texto claro de wp_signups.activation_key
en el núcleo de WordPress, se pueden considerar varias estrategias de mitigación. Estas soluciones implican tanto cambios a nivel de código como prácticas de seguridad generales para proteger los datos sensibles y reducir el riesgo de ataques:
1. Hashing de activation_key
antes de almacenarlo
Modificar el código de WordPress para aplicar un hash a wp_signups.activation_key
antes de almacenarlo en la base de datos, de manera similar a cómo se manejan actualmente los wp_users.user_activation_key
. Esto podría requerir la creación de un plugin o la modificación del core de WordPress, lo cual debe hacerse con precaución para evitar conflictos con actualizaciones futuras.
// Ejemplo de aplicación de hash a activation_key antes de almacenarlo
$activation_key = wp_generate_password(20, false);
$hashed_activation_key = hash('sha256', $activation_key);
// Almacenar $hashed_activation_key en lugar del $activation_key en texto claro
2. Actualizaciones regulares y parches de seguridad
Mantener en tu hosting web WordPress, plugins y temas actualizados es crucial para protegerse contra vulnerabilidades conocidas, incluidas aquellas que podrían permitir el acceso no autorizado a la base de datos.
3. Auditorías y monitoreo de seguridad
Realizar auditorías de seguridad regulares y monitorear la actividad de la base de datos para detectar accesos no autorizados o inusuales. Herramientas como los sistemas de detección de intrusiones pueden ser útiles para identificar intentos de explotación.
4. Fortalecimiento del acceso a la base de datos
Limitar el acceso a la base de datos solo a las IPs y usuarios necesarios, aplicando políticas de contraseñas fuertes y utilizando autenticación de dos factores (2FA) para el acceso al servidor de base de datos.
5. Preparación y respuesta a incidentes
Desarrollar un plan de respuesta a incidentes para actuar rápidamente en caso de que se detecte un acceso no autorizado a la base de datos. Esto incluye tener copias de seguridad actualizadas y un protocolo para la restauración de datos.