Hallo, Wir verwenden einen alten Webservice (SOAP/WSDL) der noch auf dem Axis 1.4 Framework basiert: https://axis.apache.org/axis/java/developers-guide.html#Table_of_Contents Wir haben einen Security Test (XML Entity Injection) durchgeführt, der erfolgreich war: wir haben einen Soap Request mit Processing Instructions abgesendet z.B. https://portswigger.net/web-security/xxe
1 | <?xml version="1.0" encoding="UTF-8"?>
|
2 | <!DOCTYPE foo [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]>
|
3 | <stockCheck><productId>&xxe;</productId></stockCheck> |
SOAP Error message ist folgende und wird erfolgreich abgewehrt:
1 | ... |
2 | AxisFault |
3 | faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException |
4 | faultSubcode: |
5 | faultString: org.xml.sax.SAXException: Processing instructions are not allowed within SOAP messages |
6 | faultActor: |
7 | faultNode: |
8 | faultDetail: |
9 | {http://xml.apache.org/axis/}stackTrace:org.xml.sax.SAXException: Processing instructions are not allowed within SOAP messages |
10 | at org.apache.axis.encoding.DeserializationContext.startDTD(DeserializationContext.java:1161) |
11 | at org.apache.xerces.parsers.AbstractSAXParser.doctypeDecl(Unknown Source) |
12 | at org.apache.xerces.impl.dtd.XMLDTDValidator.doctypeDecl(Unknown Source) |
13 | at org.apache.xerces.impl.XMLDocumentScannerImpl.scanDoctypeDecl(Unknown Source) |
14 | at org.apache.xerces.impl.XMLDocumentScannerImpl$PrologDispatcher.dispatch(Unknown Source) |
15 | at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source) |
16 | at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source) |
17 | at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source) |
18 | at org.apache.xerces.parsers.XMLParser.parse(Unknown Source) |
19 | at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source) |
20 | at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source) |
21 | at org.apache.xerces.jaxp.SAXParserImpl.parse(Unknown Source) |
22 | at org.apache.axis.encoding.DeserializationContext.parse(DeserializationContext.java:227) |
23 | at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:696) |
24 | at org.apache.axis.Message.getSOAPEnvelope(Message.java:424) |
25 | at org.apache.axis.handlers.soap.MustUnderstandChecker.invoke(MustUnderstandChecker.java:62) |
Die Frage ist, wie können wir den Fault String auf einen generalisierten (ohne Library details) anpassen? Denn dieser enthält gem. Security Tester zuviele Details, die einem Attacker helfen könnten:
1 | faultString: org.xml.sax.SAXException: Processing instructions are not allowed within SOAP messages |
Auf z.B.
1 | faultString: Server Error |
? Habe schon viel versucht, der Call kommt nicht mal in meine interne XML Parsing Klasse so dass ich da etwas machen könnte, sondern dieser Call wird vom Framework sofort standardmäßig geblockt.