flaneur2020 / fleurix

an unix-like toy os kernel
BSD 3-Clause "New" or "Revised" License
284 stars 60 forks source link

sys_open中vm_verify(path,..)的安全问题. #4

Closed chobits closed 12 years ago

chobits commented 12 years ago
  1. vm_verify虽然验证了path,但是sys_open却没有检测vm_verify返回值,相当于sys_open没有做vm_verify (这个bugfix比较容易)
  2. vm_verify(path, strlen(path)+1)有个安全问题,就是在实际vm_verify检测前,strlen(path)总是会访问path指向的内存, 如果path是恶意构造的地址就会出现安全问题,虽然我拿path=0x0来尝试, 仍然工作:/

对于问题2.可能的修复方法: a. 我发现linux 0.11是没有做安全检测就直接访问path的 0_0 b. linux 2.6.11里面是 使用strncpy_from_user(page, pathname, PATH_MAX_LEN) 这里PATH_MAX_LEN默认是4KB, 并且strncpy_from_user兼具检测和拷贝的功能.

flaneur2020 commented 12 years ago

非常感谢,fleurix在验证这一块整的挺含糊,回头好好检查下这些地方 ^