buby 1.3.3-java → 1.5.0-java

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (109) hide show
  1. data/README.rdoc +28 -14
  2. data/Rakefile +96 -6
  3. data/VERSION.yml +5 -0
  4. data/bin/buby +2 -0
  5. data/buby.gemspec +102 -17
  6. data/{java/src → ext/buby/burp}/BurpExtender.java +189 -29
  7. data/ext/burp_interfaces/burp/IBurpExtender.java +31 -0
  8. data/ext/burp_interfaces/burp/IBurpExtenderCallbacks.java +785 -0
  9. data/ext/burp_interfaces/burp/IContextMenuFactory.java +38 -0
  10. data/ext/burp_interfaces/burp/IContextMenuInvocation.java +156 -0
  11. data/ext/burp_interfaces/burp/ICookie.java +53 -0
  12. data/ext/burp_interfaces/burp/IExtensionHelpers.java +352 -0
  13. data/ext/burp_interfaces/burp/IExtensionStateListener.java +27 -0
  14. data/ext/burp_interfaces/burp/IHttpListener.java +37 -0
  15. data/ext/burp_interfaces/burp/IHttpRequestResponse.java +102 -0
  16. data/ext/burp_interfaces/burp/IHttpRequestResponsePersisted.java +26 -0
  17. data/ext/burp_interfaces/burp/IHttpRequestResponseWithMarkers.java +44 -0
  18. data/ext/burp_interfaces/burp/IHttpService.java +39 -0
  19. data/ext/burp_interfaces/burp/IInterceptedProxyMessage.java +116 -0
  20. data/ext/burp_interfaces/burp/IIntruderAttack.java +31 -0
  21. data/ext/burp_interfaces/burp/IIntruderPayloadGenerator.java +50 -0
  22. data/ext/burp_interfaces/burp/IIntruderPayloadGeneratorFactory.java +40 -0
  23. data/ext/burp_interfaces/burp/IIntruderPayloadProcessor.java +45 -0
  24. data/{java/src → ext/burp_interfaces}/burp/IMenuItemHandler.java +36 -40
  25. data/ext/burp_interfaces/burp/IMessageEditor.java +64 -0
  26. data/ext/burp_interfaces/burp/IMessageEditorController.java +49 -0
  27. data/ext/burp_interfaces/burp/IMessageEditorTab.java +102 -0
  28. data/ext/burp_interfaces/burp/IMessageEditorTabFactory.java +38 -0
  29. data/ext/burp_interfaces/burp/IParameter.java +104 -0
  30. data/ext/burp_interfaces/burp/IProxyListener.java +37 -0
  31. data/ext/burp_interfaces/burp/IRequestInfo.java +95 -0
  32. data/ext/burp_interfaces/burp/IResponseInfo.java +54 -0
  33. data/ext/burp_interfaces/burp/IScanIssue.java +120 -0
  34. data/ext/burp_interfaces/burp/IScanQueueItem.java +80 -0
  35. data/ext/burp_interfaces/burp/IScannerCheck.java +89 -0
  36. data/ext/burp_interfaces/burp/IScannerInsertionPoint.java +156 -0
  37. data/ext/burp_interfaces/burp/IScannerInsertionPointProvider.java +38 -0
  38. data/ext/burp_interfaces/burp/IScannerListener.java +30 -0
  39. data/ext/burp_interfaces/burp/IScopeChangeListener.java +25 -0
  40. data/ext/burp_interfaces/burp/ISessionHandlingAction.java +51 -0
  41. data/ext/burp_interfaces/burp/ITab.java +38 -0
  42. data/ext/burp_interfaces/burp/ITempFile.java +33 -0
  43. data/ext/burp_interfaces/burp/ITextEditor.java +90 -0
  44. data/lib/buby/burp_extender/console_frame.rb +33 -0
  45. data/lib/buby/burp_extender/console_pane.rb +26 -0
  46. data/lib/buby/burp_extender/console_tab.rb +15 -0
  47. data/lib/buby/burp_extender/context_menu.rb +29 -0
  48. data/lib/buby/burp_extender/context_menu_factory.rb +17 -0
  49. data/lib/buby/burp_extender/context_menu_item.rb +13 -0
  50. data/lib/buby/burp_extender/jcheck_box_menu_item.rb +12 -0
  51. data/lib/buby/burp_extender/jmenu.rb +11 -0
  52. data/lib/buby/burp_extender/jmenu_item.rb +12 -0
  53. data/lib/buby/burp_extender/menu.rb +11 -0
  54. data/lib/buby/burp_extender/menu_item.rb +12 -0
  55. data/lib/buby/burp_extender.rb +339 -0
  56. data/lib/buby/context_menu_factory.rb +35 -0
  57. data/lib/buby/cookie.rb +37 -0
  58. data/lib/buby/extender.rb +156 -0
  59. data/lib/buby/http_listener.rb +29 -0
  60. data/lib/buby/{extends → implants}/buby_array_wrapper.rb +0 -0
  61. data/lib/buby/implants/context_menu_invocation.rb +113 -0
  62. data/lib/buby/implants/cookie.rb +47 -0
  63. data/lib/buby/implants/extension_helpers.rb +286 -0
  64. data/lib/buby/{extends → implants}/http_request_response.rb +8 -1
  65. data/lib/buby/implants/intercepted_proxy_message.rb +53 -0
  66. data/lib/buby/implants/intruder_attack.rb +42 -0
  67. data/lib/buby/implants/jruby.rb +64 -0
  68. data/lib/buby/implants/message_editor.rb +70 -0
  69. data/lib/buby/implants/message_editor_controller.rb +60 -0
  70. data/lib/buby/implants/parameter.rb +84 -0
  71. data/lib/buby/implants/request_info.rb +47 -0
  72. data/lib/buby/implants/response_info.rb +44 -0
  73. data/lib/buby/{extends → implants}/scan_issue.rb +1 -2
  74. data/lib/buby/implants/scan_queue_item.rb +53 -0
  75. data/lib/buby/implants/scanner_insertion_point.rb +92 -0
  76. data/lib/buby/implants/temp_file.rb +43 -0
  77. data/lib/buby/implants/text_editor.rb +63 -0
  78. data/lib/buby/implants.rb +28 -0
  79. data/lib/buby/intruder_payload_generator.rb +60 -0
  80. data/lib/buby/intruder_payload_generator_factory.rb +32 -0
  81. data/lib/buby/intruder_payload_processor.rb +38 -0
  82. data/lib/buby/message_editor_controller.rb +41 -0
  83. data/lib/buby/message_editor_tab.rb +98 -0
  84. data/lib/buby/message_editor_tab_factory.rb +28 -0
  85. data/lib/buby/parameter/base.rb +40 -0
  86. data/lib/buby/parameter/body.rb +7 -0
  87. data/lib/buby/parameter/cookie.rb +7 -0
  88. data/lib/buby/parameter/url.rb +7 -0
  89. data/lib/buby/parameter.rb +15 -0
  90. data/lib/buby/proxy_listener.rb +26 -0
  91. data/lib/buby/scan_issue.rb +112 -0
  92. data/lib/buby/scanner_check.rb +84 -0
  93. data/lib/buby/scanner_insertion_point.rb +118 -0
  94. data/lib/buby/scanner_insertion_point_provider.rb +27 -0
  95. data/lib/buby/scanner_listener.rb +22 -0
  96. data/lib/buby/scope_change_listener.rb +19 -0
  97. data/lib/buby/session_handling_action.rb +43 -0
  98. data/lib/buby/tab.rb +37 -0
  99. data/lib/buby/version.rb +9 -0
  100. data/lib/buby.rb +892 -101
  101. metadata +118 -22
  102. data/VERSION +0 -1
  103. data/java/buby.jar +0 -0
  104. data/java/src/burp/IBurpExtender.java +0 -180
  105. data/java/src/burp/IBurpExtenderCallbacks.java +0 -373
  106. data/java/src/burp/IHttpRequestResponse.java +0 -156
  107. data/java/src/burp/IScanIssue.java +0 -106
  108. data/java/src/burp/IScanQueueItem.java +0 -76
  109. data/lib/buby/extends.rb +0 -4
@@ -0,0 +1,37 @@
1
+ package burp;
2
+
3
+ /*
4
+ * @(#)IProxyListener.java
5
+ *
6
+ * Copyright PortSwigger Ltd. All rights reserved.
7
+ *
8
+ * This code may be used to extend the functionality of Burp Suite Free Edition
9
+ * and Burp Suite Professional, provided that this usage does not violate the
10
+ * license terms for those products.
11
+ */
12
+ /**
13
+ * Extensions can implement this interface and then call
14
+ * <code>IBurpExtenderCallbacks.registerProxyListener()</code> to register a
15
+ * Proxy listener. The listener will be notified of requests and responses being
16
+ * processed by the Proxy tool. Extensions can perform custom analysis or
17
+ * modification of these messages, and control in-UI message interception, by
18
+ * registering a proxy listener.
19
+ */
20
+ public interface IProxyListener
21
+ {
22
+ /**
23
+ * This method is invoked when an HTTP message is being processed by the
24
+ * Proxy.
25
+ *
26
+ * @param messageIsRequest Indicates whether the HTTP message is a request
27
+ * or a response.
28
+ * @param message An
29
+ * <code>IInterceptedProxyMessage</code> object that extensions can use to
30
+ * query and update details of the message, and control whether the message
31
+ * should be intercepted and displayed to the user for manual review or
32
+ * modification.
33
+ */
34
+ void processProxyMessage(
35
+ boolean messageIsRequest,
36
+ IInterceptedProxyMessage message);
37
+ }
@@ -0,0 +1,95 @@
1
+ package burp;
2
+
3
+ /*
4
+ * @(#)IRequestInfo.java
5
+ *
6
+ * Copyright PortSwigger Ltd. All rights reserved.
7
+ *
8
+ * This code may be used to extend the functionality of Burp Suite Free Edition
9
+ * and Burp Suite Professional, provided that this usage does not violate the
10
+ * license terms for those products.
11
+ */
12
+ import java.net.URL;
13
+ import java.util.List;
14
+
15
+ /**
16
+ * This interface is used to retrieve key details about an HTTP request.
17
+ * Extensions can obtain an
18
+ * <code>IRequestInfo</code> object for a given request by calling
19
+ * <code>IExtensionHelpers.analyzeRequest()</code>.
20
+ */
21
+ public interface IRequestInfo
22
+ {
23
+ /**
24
+ * Used to indicate that there is no content.
25
+ */
26
+ static final byte CONTENT_TYPE_NONE = 0;
27
+ /**
28
+ * Used to indicate URL-encoded content.
29
+ */
30
+ static final byte CONTENT_TYPE_URL_ENCODED = 1;
31
+ /**
32
+ * Used to indicate multi-part content.
33
+ */
34
+ static final byte CONTENT_TYPE_MULTIPART = 2;
35
+ /**
36
+ * Used to indicate XML content.
37
+ */
38
+ static final byte CONTENT_TYPE_XML = 3;
39
+ /**
40
+ * Used to indicate JSON content.
41
+ */
42
+ static final byte CONTENT_TYPE_JSON = 4;
43
+ /**
44
+ * Used to indicate AMF content.
45
+ */
46
+ static final byte CONTENT_TYPE_AMF = 5;
47
+ /**
48
+ * Used to indicate unknown content.
49
+ */
50
+ static final byte CONTENT_TYPE_UNKNOWN = -1;
51
+
52
+ /**
53
+ * This method is used to obtain the HTTP method used in the request.
54
+ *
55
+ * @return The HTTP method used in the request.
56
+ */
57
+ String getMethod();
58
+
59
+ /**
60
+ * This method is used to obtain the URL in the request.
61
+ *
62
+ * @return The URL in the request.
63
+ */
64
+ URL getUrl();
65
+
66
+ /**
67
+ * This method is used to obtain the HTTP headers contained in the request.
68
+ *
69
+ * @return The HTTP headers contained in the request.
70
+ */
71
+ List<String> getHeaders();
72
+
73
+ /**
74
+ * This method is used to obtain the parameters contained in the request.
75
+ *
76
+ * @return The parameters contained in the request.
77
+ */
78
+ List<IParameter> getParameters();
79
+
80
+ /**
81
+ * This method is used to obtain the offset within the request where the
82
+ * message body begins.
83
+ *
84
+ * @return The offset within the request where the message body begins.
85
+ */
86
+ int getBodyOffset();
87
+
88
+ /**
89
+ * This method is used to obtain the content type of the message body.
90
+ *
91
+ * @return An indication of the content type of the message body. Available
92
+ * types are defined within this interface.
93
+ */
94
+ byte getContentType();
95
+ }
@@ -0,0 +1,54 @@
1
+ package burp;
2
+
3
+ /*
4
+ * @(#)IResponseInfo.java
5
+ *
6
+ * Copyright PortSwigger Ltd. All rights reserved.
7
+ *
8
+ * This code may be used to extend the functionality of Burp Suite Free Edition
9
+ * and Burp Suite Professional, provided that this usage does not violate the
10
+ * license terms for those products.
11
+ */
12
+ import java.util.List;
13
+
14
+ /**
15
+ * This interface is used to retrieve key details about an HTTP response.
16
+ * Extensions can obtain an
17
+ * <code>IResponseInfo</code> object for a given response by calling
18
+ * <code>IExtensionHelpers.analyzeResponse()</code>.
19
+ */
20
+ public interface IResponseInfo
21
+ {
22
+ /**
23
+ * This method is used to obtain the HTTP headers contained in the response.
24
+ *
25
+ * @return The HTTP headers contained in the response.
26
+ */
27
+ List<String> getHeaders();
28
+
29
+ /**
30
+ * This method is used to obtain the offset within the response where the
31
+ * message body begins.
32
+ *
33
+ * @return The offset within the response where the message body begins.
34
+ */
35
+ int getBodyOffset();
36
+
37
+ /**
38
+ * This method is used to obtain the HTTP status code contained in the
39
+ * response.
40
+ *
41
+ * @return The HTTP status code contained in the response.
42
+ */
43
+ short getStatusCode();
44
+
45
+ /**
46
+ * This method is used to obtain details of the HTTP cookies set in the
47
+ * response.
48
+ *
49
+ * @return A list of
50
+ * <code>ICookie</code> objects representing the cookies set in the
51
+ * response, if any.
52
+ */
53
+ List<ICookie> getCookies();
54
+ }
@@ -0,0 +1,120 @@
1
+ package burp;
2
+
3
+ /*
4
+ * @(#)IScanIssue.java
5
+ *
6
+ * Copyright PortSwigger Ltd. All rights reserved.
7
+ *
8
+ * This code may be used to extend the functionality of Burp Suite Free Edition
9
+ * and Burp Suite Professional, provided that this usage does not violate the
10
+ * license terms for those products.
11
+ */
12
+ /**
13
+ * This interface is used to retrieve details of Scanner issues. Extensions can
14
+ * obtain details of issues by registering an
15
+ * <code>IScannerListener</code> or by calling
16
+ * <code>IBurpExtenderCallbacks.getScanIssues()</code>. Extensions can also add
17
+ * custom Scanner issues by registering an
18
+ * <code>IScannerCheck</code> or calling
19
+ * <code>IBurpExtenderCallbacks.addScanIssue()</code>, and providing their own
20
+ * implementations of this interface
21
+ */
22
+ public interface IScanIssue
23
+ {
24
+ /**
25
+ * This method returns the URL for which the issue was generated.
26
+ *
27
+ * @return The URL for which the issue was generated.
28
+ */
29
+ java.net.URL getUrl();
30
+
31
+ /**
32
+ * This method returns the name of the issue type.
33
+ *
34
+ * @return The name of the issue type (e.g. "SQL injection").
35
+ */
36
+ String getIssueName();
37
+
38
+ /**
39
+ * This method returns a numeric identifier of the issue type. See the Burp
40
+ * Scanner help documentation for a listing of all the issue types.
41
+ *
42
+ * @return A numeric identifier of the issue type.
43
+ */
44
+ int getIssueType();
45
+
46
+ /**
47
+ * This method returns the issue severity level.
48
+ *
49
+ * @return The issue severity level. Expected values are "High", "Medium",
50
+ * "Low", "Information" or "False positive".
51
+ *
52
+ */
53
+ String getSeverity();
54
+
55
+ /**
56
+ * This method returns the issue confidence level.
57
+ *
58
+ * @return The issue confidence level. Expected values are "Certain", "Firm"
59
+ * or "Tentative".
60
+ */
61
+ String getConfidence();
62
+
63
+ /**
64
+ * This method returns a background description for this type of issue.
65
+ *
66
+ * @return A background description for this type of issue, or
67
+ * <code>null</code> if none applies.
68
+ */
69
+ String getIssueBackground();
70
+
71
+ /**
72
+ * This method returns a background description of the remediation for this
73
+ * type of issue.
74
+ *
75
+ * @return A background description of the remediation for this type of
76
+ * issue, or
77
+ * <code>null</code> if none applies.
78
+ */
79
+ String getRemediationBackground();
80
+
81
+ /**
82
+ * This method returns detailed information about this specific instance of
83
+ * the issue.
84
+ *
85
+ * @return Detailed information about this specific instance of the issue,
86
+ * or
87
+ * <code>null</code> if none applies.
88
+ */
89
+ String getIssueDetail();
90
+
91
+ /**
92
+ * This method returns detailed information about the remediation for this
93
+ * specific instance of the issue.
94
+ *
95
+ * @return Detailed information about the remediation for this specific
96
+ * instance of the issue, or
97
+ * <code>null</code> if none applies.
98
+ */
99
+ String getRemediationDetail();
100
+
101
+ /**
102
+ * This method returns the HTTP messages on the basis of which the issue was
103
+ * generated.
104
+ *
105
+ * @return The HTTP messages on the basis of which the issue was generated.
106
+ * <b>Note:</b> The items in this array should be instances of
107
+ * <code>IHttpRequestResponseWithMarkers</code> if applicable, so that
108
+ * details of the relevant portions of the request and response messages are
109
+ * available.
110
+ */
111
+ IHttpRequestResponse[] getHttpMessages();
112
+
113
+ /**
114
+ * This method returns the HTTP service for which the issue was generated.
115
+ *
116
+ * @return The HTTP service for which the issue was generated.
117
+ */
118
+ IHttpService getHttpService();
119
+
120
+ }
@@ -0,0 +1,80 @@
1
+ package burp;
2
+
3
+ /*
4
+ * @(#)IScanQueueItem.java
5
+ *
6
+ * Copyright PortSwigger Ltd. All rights reserved.
7
+ *
8
+ * This code may be used to extend the functionality of Burp Suite Free Edition
9
+ * and Burp Suite Professional, provided that this usage does not violate the
10
+ * license terms for those products.
11
+ */
12
+ /**
13
+ * This interface is used to retrieve details of items in the Burp Scanner
14
+ * active scan queue. Extensions can obtain references to scan queue items by
15
+ * calling
16
+ * <code>IBurpExtenderCallbacks.doActiveScan()</code>.
17
+ */
18
+ public interface IScanQueueItem
19
+ {
20
+ /**
21
+ * This method returns a description of the status of the scan queue item.
22
+ *
23
+ * @return A description of the status of the scan queue item.
24
+ */
25
+ String getStatus();
26
+
27
+ /**
28
+ * This method returns an indication of the percentage completed for the
29
+ * scan queue item.
30
+ *
31
+ * @return An indication of the percentage completed for the scan queue
32
+ * item.
33
+ */
34
+ byte getPercentageComplete();
35
+
36
+ /**
37
+ * This method returns the number of requests that have been made for the
38
+ * scan queue item.
39
+ *
40
+ * @return The number of requests that have been made for the scan queue
41
+ * item.
42
+ */
43
+ int getNumRequests();
44
+
45
+ /**
46
+ * This method returns the number of network errors that have occurred for
47
+ * the scan queue item.
48
+ *
49
+ * @return The number of network errors that have occurred for the scan
50
+ * queue item.
51
+ */
52
+ int getNumErrors();
53
+
54
+ /**
55
+ * This method returns the number of attack insertion points being used for
56
+ * the scan queue item.
57
+ *
58
+ * @return The number of attack insertion points being used for the scan
59
+ * queue item.
60
+ */
61
+ int getNumInsertionPoints();
62
+
63
+ /**
64
+ * This method allows the scan queue item to be canceled.
65
+ */
66
+ void cancel();
67
+
68
+ /**
69
+ * This method returns details of the issues generated for the scan queue
70
+ * item. <b>Note:</b> different items within the scan queue may contain
71
+ * duplicated versions of the same issues - for example, if the same request
72
+ * has been scanned multiple times. Duplicated issues are consolidated in
73
+ * the main view of scan results. Extensions can register an
74
+ * <code>IScannerListener</code> to get details only of unique, newly
75
+ * discovered Scanner issues post-consolidation.
76
+ *
77
+ * @return Details of the issues generated for the scan queue item.
78
+ */
79
+ IScanIssue[] getIssues();
80
+ }
@@ -0,0 +1,89 @@
1
+ package burp;
2
+
3
+ /*
4
+ * @(#)IScannerCheck.java
5
+ *
6
+ * Copyright PortSwigger Ltd. All rights reserved.
7
+ *
8
+ * This code may be used to extend the functionality of Burp Suite Free Edition
9
+ * and Burp Suite Professional, provided that this usage does not violate the
10
+ * license terms for those products.
11
+ */
12
+ import java.util.List;
13
+
14
+ /**
15
+ * Extensions can implement this interface and then call
16
+ * <code>IBurpExtenderCallbacks.registerScannerCheck()</code> to register a
17
+ * custom Scanner check. When performing scanning, Burp will ask the check to
18
+ * perform active or passive scanning on the base request, and report any
19
+ * Scanner issues that are identified.
20
+ */
21
+ public interface IScannerCheck
22
+ {
23
+ /**
24
+ * The Scanner invokes this method for each base request / response that is
25
+ * passively scanned. <b>Note:</b> Extensions should not only analyze the
26
+ * HTTP messages provided during passive scanning, and should not make any
27
+ * new HTTP requests of their own.
28
+ *
29
+ * @param baseRequestResponse The base HTTP request / response that should
30
+ * be passively scanned.
31
+ * @return A list of
32
+ * <code>IScanIssue</code> objects, or
33
+ * <code>null</code> if no issues are identified.
34
+ */
35
+ List<IScanIssue> doPassiveScan(IHttpRequestResponse baseRequestResponse);
36
+
37
+ /**
38
+ * The Scanner invokes this method for each insertion point that is actively
39
+ * scanned. Extensions may issue HTTP requests as required to carry out
40
+ * active scanning, and should use the
41
+ * <code>IScannerInsertionPoint</code> object provided to build scan
42
+ * requests for particular payloads. <b>Note:</b> Extensions are responsible
43
+ * for ensuring that attack payloads are suitably encoded within requests
44
+ * (for example, by URL-encoding relevant metacharacters in the URL query
45
+ * string). Encoding is not automatically carried out by the
46
+ * <code>IScannerInsertionPoint</code>, because this would prevent Scanner
47
+ * checks from testing for certain input filter bypasses. Extensions should
48
+ * query the
49
+ * <code>IScannerInsertionPoint</code> to determine its type, and apply any
50
+ * encoding that may be appropriate.
51
+ *
52
+ * @param baseRequestResponse The base HTTP request / response that should
53
+ * be actively scanned.
54
+ * @param insertionPoint An
55
+ * <code>IScannerInsertionPoint</code> object that can be queried to obtain
56
+ * details of the insertion point being tested, and can be used to build
57
+ * scan requests for particular payloads.
58
+ * @return A list of
59
+ * <code>IScanIssue</code> objects, or
60
+ * <code>null</code> if no issues are identified.
61
+ */
62
+ List<IScanIssue> doActiveScan(
63
+ IHttpRequestResponse baseRequestResponse,
64
+ IScannerInsertionPoint insertionPoint);
65
+
66
+ /**
67
+ * The Scanner invokes this method when the custom Scanner check has
68
+ * reported multiple issues for the same URL path. This can arise either
69
+ * because there are multiple distinct vulnerabilities, or because the same
70
+ * (or a similar) request has been scanned more than once. The custom check
71
+ * should determine whether the issues are duplicates. In most cases, where
72
+ * a check uses distinct issue names or descriptions for distinct issues,
73
+ * the consolidation process will simply be a matter of comparing these
74
+ * features for the two issues.
75
+ *
76
+ * @param existingIssue An issue that was previously reported by this
77
+ * Scanner check.
78
+ * @param newIssue An issue at the same URL path that has been newly
79
+ * reported by this Scanner check.
80
+ * @return An indication of which issue(s) should be reported in the main
81
+ * Scanner results. The method should return
82
+ * <code>-1</code> to report the existing issue only,
83
+ * <code>0</code> to report both issues, and
84
+ * <code>1</code> to report the new issue only.
85
+ */
86
+ int consolidateDuplicateIssues(
87
+ IScanIssue existingIssue,
88
+ IScanIssue newIssue);
89
+ }