Exploitable crashes 编辑
This article will help you determine if a crash is exploitable, find crashes which are exploitable, and to fix exploitable crashes.
What is an exploitable crash?
A crash report from your debugger, your OS, or Mozilla crash-stats can tell you a lot about whether or not a crash is potentially exploitable. You want to look primarily for three things, in order:
- Look at the top frame of the stack trace. If you see a hex address such as 0x292c2830 rather than a function name such as nsListBoxBodyFrame::GetRowCount at the top of the stack, a bug has caused the program to transfer control to a "random" part of memory that isn't part of the program. These crashes are almost always exploitable to run arbitrary code.
- Look at the crash reason, which will usually be something like "KERN_PROTECTION_FAILURE (0x0002) at 0x00000000". This is typically located right above the stack trace. The last number, in this case 0x00000000, is the memory address Firefox was prevented from accessing. If the address is always zero (or close to zero, such as 0x0000001c), it's probably a null dereference bug. These bugs cause the browser to crash, but they do so in a predictable way, so they are not exploitable. Most crashes fall into this category.
- Check the length of the stack trace. If it's over 300 functions long, it's likely to be a too-much-recursion crash. Like null dereferences, these crashes are not exploitable.
Any other crash where Firefox tries to use memory it does not have access to indicates some kind of memory safety bug. These crashes can often be exploited to run arbitrary code, but you can't be as certain as in the case where you see a bogus address at the top of the stack in step 1.
Finding exploitable crashes
Exploitable crashes are most often discovered through normal testing and usage, when developers recognize a crash stack in gdb or submitted to a bug as exploitable.
Additionally, Mozilla developers make heavy use of two tools in particular to find exploitable situations before they show up as exploitable crash reports.
The first tool is AddressSanitizer (ASAN). There is an MDN article documenting its use with Mozilla projects.
The other tool is Valgrind. There is an MDN article documenting its use with Mozilla projects.
Next steps
Once you've determined that a crash is potentially exploitable, take the following steps. If you need help with any of the steps (e.g. perhaps you lack necessary bugzilla privileges) please email security@mozilla.org.
- Make sure a bug is on file.
- Mark the bug as security-sensitive by putting it into the "Security-Sensitive Core Bug" group. Do this before making comments or taking actions that expose exploitability publicly.
- Put a security severity rating in the bug's keywords. If you're not sure what rating to give, err on the higher side so the bug will get more attention.
- Explain in a comment why the issue seems exploitable.
Other tools
Apple has a tool called "crashwrangler" that are still being maintained as of 2012. There is little public information about it, and it is hard to find even on the Apple developer site. To get them go to the Mac Developer Center downloads section -> Other Downloads -> search for "crashwrangler".
Microsoft released a debugger extension tool in 2009 called "!exploitable". It hasn't been updated since 2009.
See also
- Jesse Ruderman's 2006 blog post on exploitability. This post provided much material for this article.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论