56
56
import org .owasp .benchmarkutils .entities .TestCaseSetup ;
57
57
import org .owasp .benchmarkutils .entities .TestCaseSetupException ;
58
58
import org .owasp .benchmarkutils .entities .TestSuite ;
59
+ import org .owasp .benchmarkutils .entities .VerifyFixOutput ;
59
60
import org .owasp .benchmarkutils .helpers .Utils ;
60
61
import org .xml .sax .SAXException ;
61
62
@@ -115,6 +116,10 @@ public class BenchmarkCrawlerVerification extends BenchmarkCrawler {
115
116
private Map <String , TestCaseVerificationResults > testCaseNameToTestCaseVerificationResultsMap =
116
117
new HashMap <>();
117
118
119
+ private List <VerifyFixOutput > exploitedFixedTestcases = new ArrayList <>();
120
+ private List <VerifyFixOutput > brokenFixedTestcases = new ArrayList <>();
121
+ private List <VerifyFixOutput > notVerifiableFixedTestcases = new ArrayList <>();
122
+
118
123
BenchmarkCrawlerVerification () {
119
124
// A default constructor required to support Maven plugin API.
120
125
// The theCrawlerFile has to be instantiated before a crawl can be done.
@@ -133,6 +138,7 @@ protected void crawl(TestSuite testSuite) throws Exception {
133
138
List <TestCaseVerificationResults > results =
134
139
new ArrayList <TestCaseVerificationResults >();
135
140
141
+ Files .createDirectories (Paths .get (getOutputDirectory ()));
136
142
final File FILE_NON_DISCRIMINATORY_LOG =
137
143
new File (getOutputDirectory (), FILENAME_NON_DISCRIMINATORY_LOG );
138
144
final File FILE_ERRORS_LOG = new File (getOutputDirectory (), FILENAME_ERRORS_LOG );
@@ -391,6 +397,7 @@ protected void crawl(TestSuite testSuite) throws Exception {
391
397
System .out .printf ("Test case time measurements written to: %s%n" , FILE_TIMES_LOG );
392
398
393
399
RegressionTesting .printCrawlSummary (results );
400
+ printFixVerificationSummary ();
394
401
System .out .println ();
395
402
System .out .println (completionMessage );
396
403
}
@@ -399,6 +406,15 @@ protected void crawl(TestSuite testSuite) throws Exception {
399
406
// cleanupSetups(setups);
400
407
}
401
408
409
+ private void printFixVerificationSummary () {
410
+ System .out .println ("Fix verification summary:" );
411
+ System .out .println ();
412
+ System .out .println ("\t Exploited fixed test cases:\t " + exploitedFixedTestcases .size ());
413
+ System .out .println ("\t Broken fixed test cases:\t " + brokenFixedTestcases .size ());
414
+ System .out .println (
415
+ "\t Not verifiable fixed test cases:\t " + notVerifiableFixedTestcases .size ());
416
+ }
417
+
402
418
/**
403
419
* @param testSuite
404
420
* @throws Exception
@@ -599,7 +615,7 @@ private boolean verifyFix(
599
615
TestCaseVerificationResults beforeFixResults ,
600
616
TestCaseVerificationResults afterFixResults ) {
601
617
602
- boolean wasNotVerfiable =
618
+ boolean wasNotVerifiable =
603
619
afterFixResults .getTestCase ().isVulnerability ()
604
620
&& afterFixResults .getTestCase ().isUnverifiable ()
605
621
&& afterFixResults .isPassed ();
@@ -612,22 +628,32 @@ private boolean verifyFix(
612
628
.getResponseToSafeValue ()
613
629
.getResponseString ()
614
630
.equals (afterFixResults .getResponseToSafeValue ().getResponseString ());
615
- if (wasNotVerfiable ) {
631
+
632
+ VerifyFixOutput verifyFixOutput = new VerifyFixOutput ();
633
+ verifyFixOutput .setTestCaseName (afterFixResults .getTestCase ().getName ());
634
+ verifyFixOutput .setUnfixedSafeResponseInfo (beforeFixResults .getResponseToSafeValue ());
635
+ verifyFixOutput .setUnfixedAttackResponseInfo (beforeFixResults .getResponseToAttackValue ());
636
+ verifyFixOutput .setFixedSafeResponseInfo (afterFixResults .getResponseToSafeValue ());
637
+ verifyFixOutput .setFixedAttackResponseInfo (afterFixResults .getResponseToAttackValue ());
638
+ verifyFixOutput .setWasNotVerifiable (wasNotVerifiable );
639
+ verifyFixOutput .setWasExploited (wasExploited );
640
+ verifyFixOutput .setWasBroken (wasBroken );
641
+
642
+ if (wasNotVerifiable ) {
616
643
System .out .println ("NOT FIXED: Vulnerability could not be verified" );
644
+ notVerifiableFixedTestcases .add (verifyFixOutput );
617
645
}
618
646
if (wasExploited ) {
619
647
System .out .println ("NOT FIXED: Vulnerability was exploited" );
648
+ exploitedFixedTestcases .add (verifyFixOutput );
620
649
}
621
650
if (wasBroken ) {
622
651
System .out .println ("NOT FIXED: Functionality was broken" );
652
+ brokenFixedTestcases .add (verifyFixOutput );
623
653
}
624
654
625
655
File verifyFixResultFile = new File (getOutputDirectory (), FILENAME_VERIFY_FIX_RESULT );
626
656
try (BufferedWriter writer = new BufferedWriter (new FileWriter (verifyFixResultFile ))) {
627
- VerifyFixOutput verifyFixOutput = new VerifyFixOutput ();
628
- verifyFixOutput .setWasNotVerfiable (wasNotVerfiable );
629
- verifyFixOutput .setWasExploited (wasExploited );
630
- verifyFixOutput .setWasBroken (wasBroken );
631
657
String output = Utils .objectToJson (verifyFixOutput );
632
658
// System.out.println(output);
633
659
writer .write (output );
@@ -640,7 +666,7 @@ private boolean verifyFix(
640
666
e .printStackTrace ();
641
667
}
642
668
643
- return !wasNotVerfiable && !wasExploited && !wasBroken ;
669
+ return !wasNotVerifiable && !wasExploited && !wasBroken ;
644
670
}
645
671
646
672
private boolean verifyFixes (
0 commit comments