CVSS needs to be extended to accommodate combinations of vulnerabilities. The current documentation explicitly states: "Vulnerability scoring should not take into account any interaction with other vulnerabilities." But interaction among vulnerabilities is crucial for understanding the implication of particular vulnerabilities existing in an organization's environment.
Without rehashing Part I of this post, here's a simple, but real-world example. The use of Telnet receives a CVSS score of X, and a network's vulnerability to ARP cache poisoning receives a CVSS score of Y. The risk of these vulnerabilities occurring together should be significantly higher than the risk of these vulnerabilities occurring independently. A network where these two vulnerabilities are present is equivalent to a network where unencrypted usernames and passwords are broadcast to every node on the network.
So what are we to do? One potential solution may be to introduce a new environmental score that can be used in a generic way to take compounded vulnerabilities into account. Call the new metric "CoexistentVulnerability", which takes "High", "Medium" and "Low" values depending on how severely a neighboring vulnerability impacts a vulnerability's risk. In my example above, the Telnet and ARP spoofing vulnerabilities might receive a mid-level score, but when occurring together, the "CoexistentVulnerability: High" metric would push them each to high-risk scores.
But I suspect a real solution will have to introduce a new metric that is applied to tuples or sets of vulnerabilities. One possibility would be to use "Attack Sequences." Trustwave has recently added Attack Sequences to PenTest Manager, our web portal for penetration test results. Attack Sequences are somewhat like attack trees. An attack tree is built on a root node that represents the ultimate target, and then displays branching nodes depicting the possible avenues that could be pursued by an attacker to reach the root node. (For more on attack trees see Bruce Shneier's classic article from Dr. Dobbs Journal.)
An Attack Sequence, on the other hand, is rooted on a particular event -- such as the acquisition of target data or the exploitation of a vulnerability -- that occurred during a penetration test, and displays branching nodes depicting the vulnerabilities exploited by the penetration tester that were part of the sequence. Attack Sequences are flexible with regard to temporal relations. For example, the root node could be the exploitation of a relatively low-risk vulnerability, say verbose error messages from a web server, which led to the discovery of several additional vulnerabilities, including one that led to the compromise of target data. In the Attack Sequence pictured below, the arrows represent a relation like "led to the discovery of".
Alternatively, the root node could represent the acquisition of target data with child nodes representing the vulnerabilities that came together to make the compromise possible. This is depicted in the Attack Sequence below, where the arrows represent a relation like "was dependent upon".
Merely possible or incidental paths are not displayed, but only those nodes on the "critical path" -- the nodes that played a direct role in the ultimate compromise of target data. This means that the severity of risk attached to each vulnerability in the sequence should be directly related to the other vulnerabilities in the sequence and the risk associated with the ultimate compromise.
Vulnerabilities arranged in an Attack Sequence could receive an additional CVSS score that takes into account the overall risk presented by this particular sequence of vulnerabilities. Perhaps this could take the form of a fourth optional CVSS scoring group: Base, Environmental, Temporal and Sequence.
Development is already well underway for CVSS Version 3, but it's too early to tell whether this issue will receive any attention from the CVSS authors. Stay tuned.