android 提权漏洞,【转】android提权漏洞CVE

承接上一篇博客

CVE-2010-EASY漏洞是android两大提权漏洞之一,它的修复方法很简单

只需要给system/core/init/devices.c文件打个补丁就可以了,具体内容如下

static int open_uevent_socket(void)

{

+    setsockopt(s, SOL_SOCKET, SO_PASSCRED, &on, sizeof(on));

//在open_uevent_socket对套接字增加一个选项 SO_PASSCRED,这样可以让套接字增加一个认证,让接收者可以知道发送者的uid和gid :-)

}

void handle_device_fd(int fd)

{

+    for(;;) {

+        char msg[UEVENT_MSG_LEN+2];

+        char cred_msg[CMSG_SPACE(sizeof(struct ucred))];

+        struct iovec iov = {msg, sizeof(msg)};

+        struct sockaddr_nl snl;

+        struct msghdr hdr = {&snl, sizeof(snl), &iov, 1, cred_msg, sizeof(cred_msg), 0};

+

+        ssize_t n = recvmsg(fd, &hdr, 0);

+        if (n <= 0) {

+            break;

+        }

-    while((n = recv(fd, msg, UEVENT_MSG_LEN, 0)) > 0) {

-        struct uevent uevent;

+        if ((snl.nl_groups != 1) || (snl.nl_pid != 0)) {

+            /* 如果不是内核的多播信息则抛弃 */

+            continue;

+        }

+

+        struct cmsghdr * cmsg = CMSG_FIRSTHDR(&hdr);

+        if (cmsg == NULL || cmsg->cmsg_type != SCM_CREDENTIALS) {

+            /* 如果发送者的认证没有则抛弃 */

+            continue;

+        }

+

+        struct ucred * cred = (struct ucred *)CMSG_DATA(cmsg);

+        if (cred->uid != 0) {

+            /* 消息不是来自于root用户则抛弃 */

+            continue;

+        }

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值