@@ -74,6 +74,8 @@ public final class MagentoCosmicStingXxeTest {
74
74
private MockWebServer mockCallbackServer = new MockWebServer ();
75
75
76
76
private static final String MOCK_MAGENTO_VERSION = "Magento/2.4 (Mock)" ;
77
+ private static final String MOCK_CURRENCY_ENDPOINT_RESPONSE =
78
+ "{\" base_currency_code\" :\" USD\" ,\" base_currency_symbol\" :\" $\" ,\" default_display_currency_code\" :\" USD\" ,\" default_display_currency_symbol\" :\" $\" ,\" available_currency_codes\" :[\" USD\" ,\" EUR\" ],\" exchange_rates\" :[{\" currency_to\" :\" USD\" ,\" rate\" :1},{\" currency_to\" :\" EUR\" ,\" rate\" :0.7067}]}" ;
77
79
private static final String PATCHED_INSTANCE_RESPONSE = "{\" message\" :\" Invalid data type\" }" ;
78
80
private static final String VULNERABLE_INSTANCE_RESPONSE =
79
81
"{\" message\" :\" Internal Error. Details are available in Magento log file. Report ID:"
@@ -120,7 +122,7 @@ public void detect_whenVulnerableAndTcsAvailable_reportsCriticalVulnerability()
120
122
DetectionReport expectedDetection =
121
123
generateDetectionReportWithCallback (targetInfo , httpServices .get (0 ));
122
124
assertThat (detectionReports .getDetectionReportsList ()).containsExactly (expectedDetection );
123
- assertThat (mockWebServer .getRequestCount ()).isEqualTo (2 );
125
+ assertThat (mockWebServer .getRequestCount ()).isEqualTo (3 );
124
126
assertThat (mockCallbackServer .getRequestCount ()).isEqualTo (1 );
125
127
}
126
128
@@ -140,7 +142,7 @@ public void detect_whenVulnerableAndTcsNotAvailable_reportsHighVulnerability()
140
142
DetectionReport expectedDetection =
141
143
generateDetectionReportWithResponseMatching (targetInfo , httpServices .get (0 ));
142
144
assertThat (detectionReports .getDetectionReportsList ()).containsExactly (expectedDetection );
143
- assertThat (mockWebServer .getRequestCount ()).isEqualTo (2 );
145
+ assertThat (mockWebServer .getRequestCount ()).isEqualTo (3 );
144
146
assertThat (mockCallbackServer .getRequestCount ()).isEqualTo (0 );
145
147
}
146
148
@@ -158,7 +160,7 @@ public void detect_whenNotVulnerableAndTcsAvailable_reportsNoVulnerability() thr
158
160
DetectionReportList detectionReports = detector .detect (targetInfo , httpServices );
159
161
160
162
assertThat (detectionReports .getDetectionReportsList ()).isEmpty ();
161
- assertThat (mockWebServer .getRequestCount ()).isEqualTo (2 );
163
+ assertThat (mockWebServer .getRequestCount ()).isEqualTo (3 );
162
164
assertThat (mockCallbackServer .getRequestCount ()).isEqualTo (1 );
163
165
}
164
166
@@ -176,7 +178,7 @@ public void detect_whenNotVulnerableAndTcsNotAvailable_reportsNoVulnerability()
176
178
DetectionReportList detectionReports = detector .detect (targetInfo , httpServices );
177
179
178
180
assertThat (detectionReports .getDetectionReportsList ()).isEmpty ();
179
- assertThat (mockWebServer .getRequestCount ()).isEqualTo (2 );
181
+ assertThat (mockWebServer .getRequestCount ()).isEqualTo (3 );
180
182
assertThat (mockCallbackServer .getRequestCount ()).isEqualTo (0 );
181
183
}
182
184
@@ -254,11 +256,18 @@ static final class EndpointDispatcher extends Dispatcher {
254
256
public MockResponse dispatch (RecordedRequest recordedRequest ) {
255
257
256
258
if (recordedRequest .getMethod ().equals ("GET" )
257
- && recordedRequest .getPath ().equals ("/magento_version" )) {
259
+ && recordedRequest .getPath ().equals ("/" + VERSION_ENDPOINT_PATH )) {
258
260
// Version detection request
259
261
return new MockResponse ()
260
262
.setResponseCode (HttpStatus .OK .code ())
261
263
.setBody (MOCK_MAGENTO_VERSION );
264
+ } else if (recordedRequest .getMethod ().equals ("GET" )
265
+ && recordedRequest .getPath ().equals ("/" + CURRENCY_ENDPOINT_PATH )) {
266
+ // Magento identification request
267
+ return new MockResponse ()
268
+ .setResponseCode (HttpStatus .OK .code ())
269
+ .setHeader ("Content-Type" , "application/json; charset=utf-8" )
270
+ .setBody (MOCK_CURRENCY_ENDPOINT_RESPONSE );
262
271
} else if (recordedRequest .getMethod ().equals ("POST" )
263
272
&& recordedRequest .getPath ().equals ("/" + VULNERABLE_ENDPOINT_PATH )) {
264
273
// Exploit attempt
0 commit comments