Getting ‘lucky’: When Nessus Finds 0-Days
Historically, vulnerability scanners have been signature based: looking for issues based on a static signature, behavior such as banner output or service response output to certain queries. If the scanner was not specifically directed to look for a given vulnerability, it would not find it. Many in the security industry still view most network vulnerability scanners in this light. The same people consider dedicated web application scanners as the only automated tools that can intelligently discover vulnerabilities not previously disclosed (i.e., “0-day”). This is simply not the case. Nessus’ focus is on enumerating known vulnerabilities, but it also leverages a mature web application scanner capable of finding unknown vulnerabilities.
Nessus’ ten-year history and over 36,000 plugins give it a solid base for finding vulnerabilities. Despite many vulnerabilities being ‘old’ and thought to be patched, vendors and OEMs have a habit of re-using code over and over. What may have been an old vulnerability in light-weight web server could reappear years later in a device with an embedded web server running an administrator interface.
While most plugins are signature based, Nessus has had the ability to find undiscovered vulnerabilities since 2001. Years before the first web application scanner was released, Nessus used a handful of plugins that could find generic overflows and format strings regardless of the service or if they were known to be vulnerable. While these tests are simple, they are very effective at ferreting out software that performs no sanity checking of user-supplied input.
With tens of thousands of plugins used in the scanning process, Nessus can also “get lucky”. When testing for a simple vulnerability such as a traversal in a web server, Nessus may inadvertently find an issue in a different service such as a Real-Time Streaming Protocol (RTSP) server. For example, a recently discovered vulnerability in Helix Server was discovered by Nessus during an assessment. During ShmooCon, Justin Morehouse and Tony Flick gave a fun presentation on stealing guest VMware images. At the end of the talk, Justin revealed that he stumbled across the vulnerability when a Nessus plugin for Tomcat fired. In his spare time, Paul Asadoorian used Nessus to scan a network and ended up finding a remote overflow. Earlier this year, plugin 21643 found a Denial of Service in some installations of OpenSSL with Kerberos enabled (https://bugzilla.redhat.com/show_bug.cgi?id=567711). These are just some of the examples of how Nessus can find previously unknown vulnerabilities.
As web servers became more prevalent and applications migrated to web-based services, Nessus was enhanced to perform additional tests. For every web server it encountered, it could test for a variety of issues in the authentication mechanism, cookie handling, HTTP headers, HTTP methods and more. These tests are independent of vendor or version and can result in finding undiscovered vulnerabilities in web servers deployed on your network.
As previous blog entries demonstrate, Nessus has a significant capability for auditing custom web applications. During the past few years, Nessus has been expanded to test for a wide variety of application vulnerabilities such as SQL injection, arbitrary command execution, cookie manipulation, cross-site scripting (XSS), directory traversals, file inclusion and more. More and more, Tenable’s customers and research team find undiscovered vulnerabilities in web applications. This ability compliments the thorough signature-based scanning Nessus is known for and relied on.
The notion that a network vulnerability scanner can only find ‘static’ issues and misses ‘dynamic’ or custom issues is outdated. When Nessus reports an unknown flaw, it is not necessarily a false positive. Nessus has been testing for such issues for many years and will continue to receive enhancements for dynamic vulnerability scanning.