文章预览
一 环境搭建 commit:2c85ebc57b3e1817b6ce1a6b703928e113a90442 总的config: defconfig+menuconfig CONFIG_CONFIGFS_FS=y CONFIG_SECURITYFS=y CONFIG_NET_SCHED=y CONFIG_DEBUG_INFO=y CONFIG_USER_NS=y #支持新的namespace CONFIG_USERFAULTFD=y #支持userfaultfd CONFIG_TLS=y #漏洞触发必要选项 CONFIG_XFRM_ESPINTCP=y #漏洞触发必要选项,二者选其一 (同样是修改了objtool的一个代码) 二 背景知识 Linux 内核在处理 icsk->icsk_ulp_data 指针时存在错误导致 UAF, 源代码: https://elixir.bootlin.com/linux/v5.10/source/net/ipv4/tcp_ulp.c#L150 主要的tcp_*_ulp函数分析 如果 socket 设置 ulp 后进入 listen 状态,然后有其他 socket 发起 connect 系统调用请求连接,新创建的 sk 对象 会拷贝 icsk->icsk_ulp_data 指针,相关代码位于 如下: https://elixir.bootlin.com/linux/v5.10/source/net/core/sock.c#L1857 struct sock *sk_clone_lock(const struct sock *sk, const gfp_t priority) { struct proto *prot = READ
………………………………