Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
OpenSovix — cve-2025-46285 PoC de reproducción simple | Kitploit
Herramientas/GitHubGitHub/yankeelucas/opensovix
Escalada de PrivilegiosAnálisis de VulnerabilidadesAnálisis de CódigoExplotaciónAprendizaje y EducaciónExplotación de Binarios
GitHubyankeelucas/opensovix

OpenSovix

cve-2025-46285 PoC de reproducción simple

Ver Repositorio
1hace 1 mesAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir
Sitio web

CVE-2025-46285: Análisis en profundidad de la vulnerabilidad y prueba de concepto Aviso de exención de responsabilidad importante: el siguiente contenido es únicamente para fines de educación en ciberseguridad, investigación defensiva y análisis de principios de vulnerabilidades. No pruebe ni explote esta vulnerabilidad en entornos no autorizados. La explotación de vulnerabilidades del sistema puede acarrear consecuencias legales y daños en los dispositivos.

  1. Análisis en profundidad de la vulnerabilidad 1.1 Resumen de la vulnerabilidad CVE-2025-46285 es una vulnerabilidad de desbordamiento de enteros (Integer Overflow) en los sistemas operativos de Apple (incluidos macOS, iOS, iPadOS, tvOS, watchOS, visionOS). El problema central de esta vulnerabilidad reside en la forma en que se procesan las marcas de tiempo (timestamps). Apple solucionó este problema introduciendo marcas de tiempo de 64 bits (64-bit timestamps). Defecto original: el sistema utilizaba enteros de menor anchura (por ejemplo, 32 bits) para almacenar o calcular marcas de tiempo al procesar ciertos datos relacionados con el tiempo. Mecanismo de activación: cuando el valor de tiempo supera el rango máximo representable por ese tipo de entero, se produce un envolvimiento (wrap-around) o desbordamiento, lo que da lugar a resultados de cálculo incorrectos. Solución aplicada: se actualizaron las estructuras de datos, los parámetros de API y la lógica de cálculo interna relacionados a enteros de 64 bits (int64_t o uint64_t) para admitir intervalos de tiempo más largos y prevenir el desbordamiento. 1.2 Explicación detallada del principio técnico 1.2.1 Principio del desbordamiento de enteros En lenguajes de bajo nivel como C/C++, el desbordamiento de enteros ocurre cuando el resultado de una operación aritmética supera el rango que el tipo de dato puede representar. Entero con signo de 32 bits (int32_t): valor máximo de $2^{31}-1$ (2,147,483,647). Relación con el problema Y2038: el clásico problema de las marcas de tiempo de 32 bits provocará un desbordamiento el 19 de enero de 2038 a las 03:14:07 UTC. Sin embargo, la corrección de Apple indica que, incluso antes de 2038, cierta lógica de negocio específica o contadores internos podrían provocar un desbordamiento de enteros de 32 bits por otros motivos (como errores acumulativos o multiplicaciones/sumas en algoritmos concretos). Consecuencias del desbordamiento: Tiempo negativo: tras el desbordamiento, el valor puede volverse negativo, lo que hace que el sistema considere que el tiempo es «pasado» y, por tanto, eluda las comprobaciones de seguridad basadas en el tiempo (como la validez de certificados o los tiempos de espera de sesión). Asignación anómala de memoria: si la marca de tiempo se utiliza como parámetro de tamaño en una asignación de memoria, el desbordamiento puede provocar la asignación de bloques de memoria extremadamente pequeños o extremadamente grandes, derivando en un desbordamiento o subdesbordamiento del montículo (heap). Errores lógicos: lleva a la máquina de estados a un estado imprevisto. 1.2.2 ¿Por qué puede provocar una escalada de privilegios a root? Según la descripción, «An app may be able to gain root privileges» (una aplicación puede obtener privilegios de root). Esto suele lograrse a través de las siguientes vías: Escalada de privilegios (Privilege Escalation): la vulnerabilidad reside en el kernel o en demonios con altos privilegios (como launchd o subsistemas del kernel). Evasión de comprobaciones de seguridad: la aplicación construye parámetros de marca de tiempo específicos para desencadenar el desbordamiento de enteros, lo que induce al kernel a cometer errores de juicio al verificar permisos o la validez temporal. Ejecución de código arbitrario: aprovechando la corrupción de memoria o la evasión lógica, se ejecuta shellcode o se realizan llamadas al sistema (syscalls), obteniendo finalmente privilegios de root. 1.3 Condiciones de activación Versiones afectadas: macOS: < 14.8.3 (Sonoma), < 15.7.3 (Sequoia), < 26.2 (Tahoe) iOS/iPadOS: < 18.7.3, < 26.2 tvOS/visionOS/watchOS: < 26.2 Vectores de ataque: Ataque local: requiere que la aplicación se ejecute localmente y pueda invocar los frameworks del kernel o las API del sistema afectados. Construcción del tiempo: el atacante necesita poder controlar los parámetros de tiempo pasados al sistema o construir indirectamente, mediante llamadas al sistema, un valor de tiempo que provoque el desbordamiento. Dependencias del entorno: El sistema no tiene instalados los últimos parches de seguridad. La aplicación tiene permisos suficientes para activar la ruta del kernel (normalmente exige una evasión de la sandbox o una vulnerabilidad de bajos privilegios existente como punto de apoyo). 1.4 Alcance del impacto Confidencialidad: alta. El atacante podría acceder a datos sensibles. Integridad: alta. El atacante podría modificar archivos o la configuración del sistema. Disponibilidad: media. Podría provocar el bloqueo del sistema o la denegación de servicio. Privilegios: muy altos. Escalada desde el espacio de usuario al espacio del kernel (root).
  2. Código de prueba de concepto (POC) Nota: dado que CVE-2025-46285 implica un desbordamiento de enteros a nivel de kernel y Apple ya lo ha corregido, no es posible proporcionar un POC que explote directamente los sistemas más recientes. El siguiente código es una simulación educativa que pretende mostrar el principio del desbordamiento de marcas de tiempo de 32 bits y cómo corregir correctamente este problema en el código. Este POC simula una función de procesamiento de marcas de tiempo vulnerable y demuestra cómo el desbordamiento provoca errores lógicos.
root@kitploit:~
#include <stdio.h>
#include <stdint.h>
#include <time.h>
#include <stdlib.h>

// 模拟存在漏洞的系统组件
// 使用 32位有符号整数存储时间戳,这是 CVE-2025-46285 的根源

typedef struct {
    int32_t timestamp; // 漏洞点:使用 32位整数
    int32_t duration;  // 持续时间
    int is_valid;      // 有效性标志
} TimeSensitiveData;

/**
 * 漏洞函数:计算过期时间
 * 问题:如果 current_time + duration 超过 INT32_MAX,将发生溢出
 * 结果:timestamp 可能变为负数,导致安全检查失效
 */
int vulnerable_check_expiration(int32_t current_time, int32_t duration) {
    int32_t expiration_time;
    
    // 模拟整数溢出
    // 如果 current_time 接近 INT32_MAX,加上 duration 后会回绕到负数
    expiration_time = current_time + duration;
    
    printf("[Vulnerable] Current Time: %d, Duration: %d\n", current_time, duration);
    printf("[Vulnerable] Calculated Expiration: %d\n", expiration_time);
    
    // 安全检查:如果当前时间大于过期时间,则无效
    // 但如果 expiration_time 因溢出变为负数,而 current_time 为正数,
    // 则 current_time > expiration_time 永远成立,导致“已过期”判断错误
    // 或者在某些逻辑中,负数时间可能被解释为“永久有效”或绕过验证
    
    if (current_time > expiration_time) {
        return 0; // 已过期
    } else {
        return 1; // 有效
    }
}

/**
 * 修复函数:使用 64位整数处理时间戳
 * 修复方案:采用 64位时间戳,防止溢出
 */
int fixed_check_expiration(int64_t current_time, int64_t duration) {
    int64_t expiration_time;
    
    // 使用 64位整数,极大范围,几乎不可能溢出
    expiration_time = current_time + duration;
    
    printf("[Fixed] Current Time: %lld, Duration: %lld\n", current_time, duration);
    printf("[Fixed] Calculated Expiration: %lld\n", expiration_time);
    
    if (current_time > expiration_time) {
        return 0; // 已过期
    } else {
        return 1; // 有效
    }
}

/**
 * 模拟攻击场景
 * 攻击者构造一个接近 INT32_MAX 的时间戳,加上一个小的持续时间,
 * 导致溢出并产生负数,从而绕过基于时间的安全检查
 */
void demonstrate_attack() {
    printf("\n=== 演示整数溢出攻击 ===\n");
    
    // 设置一个接近 32位整数最大值的时间
    // INT32_MAX = 2147483647
    int32_t near_max_time = 2147483640; 
    int32_t small_duration = 10;
    
    printf("攻击者构造的时间戳: %d\n", near_max_time);
    printf("攻击者构造的持续时间: %d\n", small_duration);
    
    int result_vuln = vulnerable_check_expiration(near_max_time, small_duration);
    
    if (result_vuln == 1) {
        printf("[!] 漏洞利用成功: 系统错误地认为数据仍然有效!\n");
        printf("[!] 原因: 2147483640 + 10 = -2147483646 (溢出回绕)\n");
        printf("[!] 当前时间 (%d) 不大于 过期时间 (-2147483646),所以返回有效。\n", near_max_time);
    } else {
        printf("[*] 漏洞利用失败\n");
    }
}

/**
 * 演示修复后的行为
 */
void demonstrate_fix() {
    printf("\n=== 演示修复后的行为 ===\n");
    
    int64_t near_max_time_64 = 2147483640;
    int64_t small_duration_64 = 10;
    
    int result_fixed = fixed_check_expiration(near_max_time_64, small_duration_64);
    
    if (result_fixed == 1) {
        printf("[+] 修复有效: 系统正确识别数据有效。\n");
        printf("[+] 原因: 2147483640 + 10 = 2147483650 (无溢出)\n");
        printf("[+] 当前时间 (%lld) 不大于 过期时间 (2147483650),所以返回有效。\n", near_max_time_64);
    } else {
        printf("[*] 数据已过期\n");
    }
}

int main() {
    printf("CVE-2025-46285 概念验证:整数溢出导致时间戳处理错误\n");
    printf("======================================================\n");
    
    // 1. 演示攻击
    demonstrate_attack();
    
    // 2. 演示修复
    demonstrate_fix();
    
    printf("\n======================================================\n");
    printf("结论: 使用 64位整数 (int64_t) 可以彻底避免此类溢出问题。\n");
    printf("Apple 在 iOS 18.7.3, macOS 14.8.3 等版本中已应用此修复。\n");
    
    return 0;
}

Explicación de los comentarios del código Definición de la estructura de datos: La estructura TimeSensitiveData simula el objeto que almacena las marcas de tiempo en el sistema. int32_t timestamp es el origen de la vulnerabilidad, ya que limita el rango de representación del tiempo. Función vulnerable_check_expiration: Simula la lógica vulnerable. La línea expiration_time = current_time + duration; se desborda cuando current_time se acerca a INT32_MAX. En un entero con signo de 32 bits, 2147483647 + 1 se convierte en -2147483648. La comparación posterior current_time > expiration_time produce una rama lógica incorrecta debido a la comparación con un número negativo, lo que puede permitir la evasión de las políticas de seguridad. Función fixed_check_expiration: Muestra la solución aplicada por Apple: usar int64_t. El valor máximo de un entero de 64 bits es de aproximadamente $9 \times 10^{18}$, suficiente para representar hasta el año 292 000 millones d. C., lo que elimina de raíz la posibilidad de desbordamiento. Función demonstrate_attack: Construye una marca de tiempo cercana a INT32_MAX (2147483640) y una duración pequeña (10). Tras la ejecución, expiration_time se vuelve negativo. Dado que 2147483640 > -2147483646 es verdadero, la función devuelve 0 (caducado). Nota: en cierta lógica de seguridad, si el sistema espera que «válido» devuelva un valor distinto de cero, o si la lógica es if (expiration_time < 0) return VALID;, el atacante podría construir un estado «permanentemente válido». Este ejemplo muestra principalmente la anomalía numérica causada por el desbordamiento. Función demonstrate_fix: Ejecuta la misma operación con enteros de 64 bits; sin desbordamiento, la lógica es correcta. Recomendaciones de defensa Actualice el sistema: actualice inmediatamente macOS, iOS, iPadOS, tvOS, watchOS y visionOS a las últimas versiones (macOS 14.8.3+, iOS 18.7.3+, etc.). Revisión de código: al desarrollar código que implique el manejo del tiempo, utilice siempre enteros de 64 bits (int64_t, uint64_t) para almacenar las marcas de tiempo. Validación de entradas: realice comprobaciones de límites en todos los parámetros de tiempo procedentes de entradas externas para garantizar que se encuentren dentro de un rango razonable. Uso de la biblioteca estándar: priorice el uso de las API de tiempo de alto nivel proporcionadas por el sistema operativo, ya que normalmente ya gestionan el problema del desbordamiento subyacente.

Descargar herramienta