mirror of
https://github.com/openhab/openhab-addons.git
synced 2025-01-10 15:11:59 +01:00
Fix XXE vulnerabilities in multiple add-ons
Signed-off-by: Kai Kreuzer <kai@openhab.org>
This commit is contained in:
parent
c57d3ee17b
commit
81935b0ab1
@ -18,6 +18,8 @@ import java.io.StringReader;
|
||||
|
||||
import javax.xml.bind.JAXBException;
|
||||
import javax.xml.bind.Unmarshaller;
|
||||
import javax.xml.stream.XMLStreamException;
|
||||
import javax.xml.stream.XMLStreamReader;
|
||||
|
||||
import org.eclipse.jdt.annotation.NonNullByDefault;
|
||||
import org.eclipse.smarthome.core.thing.ThingStatus;
|
||||
@ -62,15 +64,16 @@ public class FritzAhaUpdateCallback extends FritzAhaReauthCallback {
|
||||
logger.trace("Received State response {}", response);
|
||||
if (isValidRequest()) {
|
||||
try {
|
||||
XMLStreamReader xsr = JAXBUtils.XMLINPUTFACTORY.createXMLStreamReader(new StringReader(response));
|
||||
Unmarshaller unmarshaller = JAXBUtils.JAXBCONTEXT_DEVICES.createUnmarshaller();
|
||||
DeviceListModel model = (DeviceListModel) unmarshaller.unmarshal(new StringReader(response));
|
||||
DeviceListModel model = (DeviceListModel) unmarshaller.unmarshal(xsr);
|
||||
if (model != null) {
|
||||
handler.onDeviceListAdded(model.getDevicelist());
|
||||
} else {
|
||||
logger.debug("no model in response");
|
||||
}
|
||||
handler.setStatusInfo(ThingStatus.ONLINE, ThingStatusDetail.NONE, null);
|
||||
} catch (JAXBException e) {
|
||||
} catch (JAXBException | XMLStreamException e) {
|
||||
logger.error("Exception creating Unmarshaller: {}", e.getLocalizedMessage(), e);
|
||||
handler.setStatusInfo(ThingStatus.OFFLINE, ThingStatusDetail.COMMUNICATION_ERROR,
|
||||
e.getLocalizedMessage());
|
||||
|
@ -18,6 +18,8 @@ import java.io.StringReader;
|
||||
|
||||
import javax.xml.bind.JAXBException;
|
||||
import javax.xml.bind.Unmarshaller;
|
||||
import javax.xml.stream.XMLStreamException;
|
||||
import javax.xml.stream.XMLStreamReader;
|
||||
|
||||
import org.eclipse.jdt.annotation.NonNullByDefault;
|
||||
import org.openhab.binding.avmfritz.internal.dto.templates.TemplateListModel;
|
||||
@ -58,14 +60,15 @@ public class FritzAhaUpdateTemplatesCallback extends FritzAhaReauthCallback {
|
||||
logger.trace("Received response '{}'", response);
|
||||
if (isValidRequest()) {
|
||||
try {
|
||||
XMLStreamReader xsr = JAXBUtils.XMLINPUTFACTORY.createXMLStreamReader(new StringReader(response));
|
||||
Unmarshaller unmarshaller = JAXBUtils.JAXBCONTEXT_TEMPLATES.createUnmarshaller();
|
||||
TemplateListModel model = (TemplateListModel) unmarshaller.unmarshal(new StringReader(response));
|
||||
TemplateListModel model = (TemplateListModel) unmarshaller.unmarshal(xsr);
|
||||
if (model != null) {
|
||||
handler.addTemplateList(model.getTemplates());
|
||||
} else {
|
||||
logger.debug("no template in response");
|
||||
}
|
||||
} catch (JAXBException e) {
|
||||
} catch (JAXBException | XMLStreamException e) {
|
||||
logger.error("Exception creating Unmarshaller: {}", e.getLocalizedMessage(), e);
|
||||
}
|
||||
} else {
|
||||
|
@ -14,6 +14,7 @@ package org.openhab.binding.avmfritz.internal.util;
|
||||
|
||||
import javax.xml.bind.JAXBContext;
|
||||
import javax.xml.bind.JAXBException;
|
||||
import javax.xml.stream.XMLInputFactory;
|
||||
|
||||
import org.eclipse.jdt.annotation.NonNullByDefault;
|
||||
import org.eclipse.jdt.annotation.Nullable;
|
||||
@ -34,6 +35,7 @@ public class JAXBUtils {
|
||||
|
||||
public static final @Nullable JAXBContext JAXBCONTEXT_DEVICES = initJAXBContextDevices();
|
||||
public static final @Nullable JAXBContext JAXBCONTEXT_TEMPLATES = initJAXBContextTemplates();
|
||||
public static final XMLInputFactory XMLINPUTFACTORY = initXMLInputFactory();
|
||||
|
||||
private static @Nullable JAXBContext initJAXBContextDevices() {
|
||||
try {
|
||||
@ -52,4 +54,11 @@ public class JAXBUtils {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private static XMLInputFactory initXMLInputFactory() {
|
||||
XMLInputFactory xif = XMLInputFactory.newInstance();
|
||||
xif.setProperty(XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES, false);
|
||||
xif.setProperty(XMLInputFactory.SUPPORT_DTD, false);
|
||||
return xif;
|
||||
}
|
||||
}
|
||||
|
@ -41,6 +41,7 @@ public class XMLResponseProcessor {
|
||||
|
||||
public void handleMessage(String msg) throws SAXException, IOException {
|
||||
XMLReader reader = XMLReaderFactory.createXMLReader();
|
||||
reader.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
|
||||
reader.setContentHandler(new XMLResponseHandler(handler, stateSwitchingMap));
|
||||
reader.parse(new InputSource(new StringReader(msg)));
|
||||
}
|
||||
|
@ -309,6 +309,8 @@ public class DenonMarantzHttpConnector extends DenonMarantzConnector {
|
||||
if (StringUtils.isNotBlank(result)) {
|
||||
JAXBContext jc = JAXBContext.newInstance(response);
|
||||
XMLInputFactory xif = XMLInputFactory.newInstance();
|
||||
xif.setProperty(XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES, false);
|
||||
xif.setProperty(XMLInputFactory.SUPPORT_DTD, false);
|
||||
XMLStreamReader xsr = xif.createXMLStreamReader(IOUtils.toInputStream(result));
|
||||
xsr = new PropertyRenamerDelegate(xsr);
|
||||
|
||||
|
@ -261,8 +261,15 @@ public class DenonMarantzHandler extends BaseThingHandler implements DenonMarant
|
||||
|
||||
if (status == HttpURLConnection.HTTP_OK && response != null) {
|
||||
DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
|
||||
DocumentBuilder builder;
|
||||
try {
|
||||
// see
|
||||
// https://cheatsheetseries.owasp.org/cheatsheets/XML_External_Entity_Prevention_Cheat_Sheet.html
|
||||
domFactory.setFeature("http://xml.org/sax/features/external-general-entities", false);
|
||||
domFactory.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
|
||||
domFactory.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
|
||||
domFactory.setXIncludeAware(false);
|
||||
domFactory.setExpandEntityReferences(false);
|
||||
DocumentBuilder builder;
|
||||
builder = domFactory.newDocumentBuilder();
|
||||
Document dDoc = builder.parse(new InputSource(new StringReader(response.getContentAsString())));
|
||||
XPath xPath = XPathFactory.newInstance().newXPath();
|
||||
|
@ -155,7 +155,14 @@ public abstract class DLinkHNAPCommunication {
|
||||
uri = new URI("http://" + ipAddress + "/HNAP1");
|
||||
httpClient.start();
|
||||
|
||||
parser = DocumentBuilderFactory.newInstance().newDocumentBuilder();
|
||||
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
|
||||
// see https://cheatsheetseries.owasp.org/cheatsheets/XML_External_Entity_Prevention_Cheat_Sheet.html
|
||||
dbf.setFeature("http://xml.org/sax/features/external-general-entities", false);
|
||||
dbf.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
|
||||
dbf.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
|
||||
dbf.setXIncludeAware(false);
|
||||
dbf.setExpandEntityReferences(false);
|
||||
parser = dbf.newDocumentBuilder();
|
||||
|
||||
final MessageFactory messageFactory = MessageFactory.newInstance();
|
||||
requestAction = messageFactory.createMessage();
|
||||
|
@ -82,8 +82,18 @@ public class Enigma2Client {
|
||||
private final DocumentBuilderFactory factory;
|
||||
|
||||
public Enigma2Client(String host, @Nullable String user, @Nullable String password, int requestTimeout) {
|
||||
this.enigma2HttpClient = new Enigma2HttpClient(requestTimeout);
|
||||
this.factory = DocumentBuilderFactory.newInstance();
|
||||
enigma2HttpClient = new Enigma2HttpClient(requestTimeout);
|
||||
factory = DocumentBuilderFactory.newInstance();
|
||||
// see https://cheatsheetseries.owasp.org/cheatsheets/XML_External_Entity_Prevention_Cheat_Sheet.html
|
||||
try {
|
||||
factory.setFeature("http://xml.org/sax/features/external-general-entities", false);
|
||||
factory.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
|
||||
factory.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
|
||||
factory.setXIncludeAware(false);
|
||||
factory.setExpandEntityReferences(false);
|
||||
} catch (ParserConfigurationException e) {
|
||||
logger.warn("Failed setting parser features against XXE attacks!", e);
|
||||
}
|
||||
if (StringUtils.isNotEmpty(user) && StringUtils.isNotEmpty(password)) {
|
||||
this.host = "http://" + user + ":" + password + "@" + host;
|
||||
} else {
|
||||
|
@ -105,6 +105,12 @@ public class Client {
|
||||
public Client() {
|
||||
documentBuilderFactory.setNamespaceAware(true);
|
||||
try {
|
||||
// see https://cheatsheetseries.owasp.org/cheatsheets/XML_External_Entity_Prevention_Cheat_Sheet.html
|
||||
documentBuilderFactory.setFeature("http://xml.org/sax/features/external-general-entities", false);
|
||||
documentBuilderFactory.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
|
||||
documentBuilderFactory.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
|
||||
documentBuilderFactory.setXIncludeAware(false);
|
||||
documentBuilderFactory.setExpandEntityReferences(false);
|
||||
documentBuilder = documentBuilderFactory.newDocumentBuilder();
|
||||
} catch (ParserConfigurationException e) {
|
||||
throw new IllegalStateException(e);
|
||||
|
@ -209,6 +209,12 @@ public class FrontierSiliconRadioApiResult {
|
||||
private Document getXmlDocFromString(String xmlString)
|
||||
throws ParserConfigurationException, SAXException, IOException {
|
||||
final DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
|
||||
// see https://cheatsheetseries.owasp.org/cheatsheets/XML_External_Entity_Prevention_Cheat_Sheet.html
|
||||
factory.setFeature("http://xml.org/sax/features/external-general-entities", false);
|
||||
factory.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
|
||||
factory.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
|
||||
factory.setXIncludeAware(false);
|
||||
factory.setExpandEntityReferences(false);
|
||||
final DocumentBuilder builder = factory.newDocumentBuilder();
|
||||
final Document xmlDocument = builder.parse(new InputSource(new StringReader(xmlString)));
|
||||
return xmlDocument;
|
||||
|
@ -61,7 +61,14 @@ public class StatusFileInterpreter {
|
||||
|
||||
public void read() {
|
||||
try {
|
||||
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
|
||||
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
|
||||
// see https://cheatsheetseries.owasp.org/cheatsheets/XML_External_Entity_Prevention_Cheat_Sheet.html
|
||||
factory.setFeature("http://xml.org/sax/features/external-general-entities", false);
|
||||
factory.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
|
||||
factory.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
|
||||
factory.setXIncludeAware(false);
|
||||
factory.setExpandEntityReferences(false);
|
||||
DocumentBuilder builder = factory.newDocumentBuilder();
|
||||
String statusPage = HttpUtil.executeUrl("GET", String.format(URL_TEMPLATE, hostname), 5000);
|
||||
InputStream inputStream = new ByteArrayInputStream(statusPage.getBytes());
|
||||
Document document = builder.parse(inputStream);
|
||||
|
@ -47,6 +47,9 @@ public class XmlRpcResponse implements RpcResponse {
|
||||
throws SAXException, ParserConfigurationException, IOException {
|
||||
SAXParserFactory factory = SAXParserFactory.newInstance();
|
||||
SAXParser saxParser = factory.newSAXParser();
|
||||
factory.setFeature("http://xml.org/sax/features/external-general-entities", false);
|
||||
saxParser.getXMLReader().setFeature("http://xml.org/sax/features/external-general-entities", false);
|
||||
factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
|
||||
InputSource inputSource = new InputSource(is);
|
||||
inputSource.setEncoding(encoding);
|
||||
saxParser.parse(inputSource, new XmlRpcHandler());
|
||||
|
@ -120,6 +120,12 @@ public class HPWebServerClient {
|
||||
|
||||
private synchronized Document getDocument(String contentAsString)
|
||||
throws ParserConfigurationException, SAXException, IOException {
|
||||
// see https://cheatsheetseries.owasp.org/cheatsheets/XML_External_Entity_Prevention_Cheat_Sheet.html
|
||||
factory.setFeature("http://xml.org/sax/features/external-general-entities", false);
|
||||
factory.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
|
||||
factory.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
|
||||
factory.setXIncludeAware(false);
|
||||
factory.setExpandEntityReferences(false);
|
||||
DocumentBuilder builder = factory.newDocumentBuilder();
|
||||
InputSource source = new InputSource(new StringReader(contentAsString));
|
||||
return builder.parse(source);
|
||||
|
@ -53,6 +53,12 @@ public class ProjectFileUtils {
|
||||
File fXmlFile = new File(filePath);
|
||||
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
|
||||
try {
|
||||
// see https://cheatsheetseries.owasp.org/cheatsheets/XML_External_Entity_Prevention_Cheat_Sheet.html
|
||||
dbFactory.setFeature("http://xml.org/sax/features/external-general-entities", false);
|
||||
dbFactory.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
|
||||
dbFactory.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
|
||||
dbFactory.setXIncludeAware(false);
|
||||
dbFactory.setExpandEntityReferences(false);
|
||||
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
|
||||
Document doc = dBuilder.parse(fXmlFile);
|
||||
return doc;
|
||||
|
@ -78,6 +78,12 @@ public class DeviceTypeLoader {
|
||||
*/
|
||||
public void loadDeviceTypesXML(InputStream in) throws ParserConfigurationException, SAXException, IOException {
|
||||
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
|
||||
// see https://cheatsheetseries.owasp.org/cheatsheets/XML_External_Entity_Prevention_Cheat_Sheet.html
|
||||
dbFactory.setFeature("http://xml.org/sax/features/external-general-entities", false);
|
||||
dbFactory.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
|
||||
dbFactory.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
|
||||
dbFactory.setXIncludeAware(false);
|
||||
dbFactory.setExpandEntityReferences(false);
|
||||
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
|
||||
Document doc = dBuilder.parse(in);
|
||||
doc.getDocumentElement().normalize();
|
||||
|
@ -52,6 +52,12 @@ public class FeatureTemplateLoader {
|
||||
List<FeatureTemplate> features = new ArrayList<>();
|
||||
try {
|
||||
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
|
||||
// see https://cheatsheetseries.owasp.org/cheatsheets/XML_External_Entity_Prevention_Cheat_Sheet.html
|
||||
dbFactory.setFeature("http://xml.org/sax/features/external-general-entities", false);
|
||||
dbFactory.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
|
||||
dbFactory.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
|
||||
dbFactory.setXIncludeAware(false);
|
||||
dbFactory.setExpandEntityReferences(false);
|
||||
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
|
||||
// Parse it!
|
||||
Document doc = dBuilder.parse(input);
|
||||
|
@ -56,6 +56,12 @@ public class XMLMessageReader {
|
||||
HashMap<String, Msg> messageMap = new HashMap<>();
|
||||
try {
|
||||
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
|
||||
// see https://cheatsheetseries.owasp.org/cheatsheets/XML_External_Entity_Prevention_Cheat_Sheet.html
|
||||
dbFactory.setFeature("http://xml.org/sax/features/external-general-entities", false);
|
||||
dbFactory.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
|
||||
dbFactory.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
|
||||
dbFactory.setXIncludeAware(false);
|
||||
dbFactory.setExpandEntityReferences(false);
|
||||
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
|
||||
// Parse it!
|
||||
Document doc = dBuilder.parse(input);
|
||||
|
@ -498,6 +498,12 @@ public class OnkyoHandler extends UpnpAudioSinkHandler implements OnkyoEventList
|
||||
private void processInfo(String infoXML) {
|
||||
try {
|
||||
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
|
||||
// see https://cheatsheetseries.owasp.org/cheatsheets/XML_External_Entity_Prevention_Cheat_Sheet.html
|
||||
factory.setFeature("http://xml.org/sax/features/external-general-entities", false);
|
||||
factory.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
|
||||
factory.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
|
||||
factory.setXIncludeAware(false);
|
||||
factory.setExpandEntityReferences(false);
|
||||
DocumentBuilder builder = factory.newDocumentBuilder();
|
||||
try (StringReader sr = new StringReader(infoXML)) {
|
||||
InputSource is = new InputSource(sr);
|
||||
|
@ -81,6 +81,12 @@ public class SamsungTvUtils {
|
||||
public static @Nullable Document loadXMLFromString(String xml) {
|
||||
try {
|
||||
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
|
||||
// see https://cheatsheetseries.owasp.org/cheatsheets/XML_External_Entity_Prevention_Cheat_Sheet.html
|
||||
factory.setFeature("http://xml.org/sax/features/external-general-entities", false);
|
||||
factory.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
|
||||
factory.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
|
||||
factory.setXIncludeAware(false);
|
||||
factory.setExpandEntityReferences(false);
|
||||
DocumentBuilder builder = factory.newDocumentBuilder();
|
||||
InputSource is = new InputSource(new StringReader(xml));
|
||||
return builder.parse(is);
|
||||
|
@ -134,6 +134,7 @@ public class SonosXMLParser {
|
||||
*/
|
||||
public static @Nullable SonosResourceMetaData getResourceMetaData(String xml) throws SAXException {
|
||||
XMLReader reader = XMLReaderFactory.createXMLReader();
|
||||
reader.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
|
||||
ResourceMetaDataHandler handler = new ResourceMetaDataHandler();
|
||||
reader.setContentHandler(handler);
|
||||
try {
|
||||
|
@ -309,6 +309,8 @@ public class TelldusLiveDeviceController implements DeviceChangeListener, Sensor
|
||||
// TelldusLiveHandler.logger.info("Devices" + resp.getResponseBody());
|
||||
JAXBContext jc = JAXBContext.newInstance(response);
|
||||
XMLInputFactory xif = XMLInputFactory.newInstance();
|
||||
xif.setProperty(XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES, false);
|
||||
xif.setProperty(XMLInputFactory.SUPPORT_DTD, false);
|
||||
XMLStreamReader xsr = xif.createXMLStreamReader(resp.getResponseBodyAsStream());
|
||||
// xsr = new PropertyRenamerDelegate(xsr);
|
||||
|
||||
|
@ -250,6 +250,7 @@ public class VitotronicBridgeHandler extends BaseBridgeHandler {
|
||||
logger.trace("Start Background Thread for recieving data from adapter");
|
||||
try {
|
||||
XMLReader xmlReader = XMLReaderFactory.createXMLReader();
|
||||
xmlReader.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
|
||||
xmlReader.setContentHandler(new XmlHandler());
|
||||
logger.trace("Start Parser for optolink adapter");
|
||||
xmlReader.parse(new InputSource(inStream));
|
||||
|
@ -156,6 +156,13 @@ public class WemoLinkDiscoveryService extends AbstractDiscoveryService implement
|
||||
|
||||
// Build parser for received <DeviceList>
|
||||
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
|
||||
// see
|
||||
// https://cheatsheetseries.owasp.org/cheatsheets/XML_External_Entity_Prevention_Cheat_Sheet.html
|
||||
dbf.setFeature("http://xml.org/sax/features/external-general-entities", false);
|
||||
dbf.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
|
||||
dbf.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
|
||||
dbf.setXIncludeAware(false);
|
||||
dbf.setExpandEntityReferences(false);
|
||||
DocumentBuilder db = dbf.newDocumentBuilder();
|
||||
InputSource is = new InputSource();
|
||||
is.setCharacterStream(new StringReader(stringParser));
|
||||
|
@ -290,6 +290,13 @@ public class WemoCoffeeHandler extends AbstractWemoHandler implements UpnpIOPart
|
||||
stringParser = "<data>" + stringParser + "</data>";
|
||||
|
||||
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
|
||||
// see
|
||||
// https://cheatsheetseries.owasp.org/cheatsheets/XML_External_Entity_Prevention_Cheat_Sheet.html
|
||||
dbf.setFeature("http://xml.org/sax/features/external-general-entities", false);
|
||||
dbf.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
|
||||
dbf.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
|
||||
dbf.setXIncludeAware(false);
|
||||
dbf.setExpandEntityReferences(false);
|
||||
DocumentBuilder db = dbf.newDocumentBuilder();
|
||||
InputSource is = new InputSource();
|
||||
is.setCharacterStream(new StringReader(stringParser));
|
||||
|
@ -359,6 +359,13 @@ public class WemoHolmesHandler extends AbstractWemoHandler implements UpnpIOPart
|
||||
stringParser = "<data>" + stringParser + "</data>";
|
||||
|
||||
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
|
||||
// see
|
||||
// https://cheatsheetseries.owasp.org/cheatsheets/XML_External_Entity_Prevention_Cheat_Sheet.html
|
||||
dbf.setFeature("http://xml.org/sax/features/external-general-entities", false);
|
||||
dbf.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
|
||||
dbf.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
|
||||
dbf.setXIncludeAware(false);
|
||||
dbf.setExpandEntityReferences(false);
|
||||
DocumentBuilder db = dbf.newDocumentBuilder();
|
||||
InputSource is = new InputSource();
|
||||
is.setCharacterStream(new StringReader(stringParser));
|
||||
|
@ -222,6 +222,13 @@ public class WemoMakerHandler extends AbstractWemoHandler implements UpnpIOParti
|
||||
stringParser = "<data>" + stringParser + "</data>";
|
||||
|
||||
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
|
||||
// see
|
||||
// https://cheatsheetseries.owasp.org/cheatsheets/XML_External_Entity_Prevention_Cheat_Sheet.html
|
||||
dbf.setFeature("http://xml.org/sax/features/external-general-entities", false);
|
||||
dbf.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
|
||||
dbf.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
|
||||
dbf.setXIncludeAware(false);
|
||||
dbf.setExpandEntityReferences(false);
|
||||
DocumentBuilder db = dbf.newDocumentBuilder();
|
||||
InputSource is = new InputSource();
|
||||
is.setCharacterStream(new StringReader(stringParser));
|
||||
|
@ -173,7 +173,13 @@ public class XMLUtils {
|
||||
: "<?xml version=\"1.0\" encoding=\"utf-8\"?>" + message;
|
||||
|
||||
try {
|
||||
return XMLUtils.dbf.newDocumentBuilder().parse(new InputSource(new StringReader(response)));
|
||||
// see https://cheatsheetseries.owasp.org/cheatsheets/XML_External_Entity_Prevention_Cheat_Sheet.html
|
||||
dbf.setFeature("http://xml.org/sax/features/external-general-entities", false);
|
||||
dbf.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
|
||||
dbf.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
|
||||
dbf.setXIncludeAware(false);
|
||||
dbf.setExpandEntityReferences(false);
|
||||
return dbf.newDocumentBuilder().parse(new InputSource(new StringReader(response)));
|
||||
} catch (SAXException | ParserConfigurationException e) {
|
||||
throw new ReceivedMessageParseException(e);
|
||||
}
|
||||
|
@ -55,6 +55,12 @@ public class XPathTransformationService implements TransformationService {
|
||||
|
||||
try {
|
||||
DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
|
||||
// see https://cheatsheetseries.owasp.org/cheatsheets/XML_External_Entity_Prevention_Cheat_Sheet.html
|
||||
domFactory.setFeature("http://xml.org/sax/features/external-general-entities", false);
|
||||
domFactory.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
|
||||
domFactory.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
|
||||
domFactory.setXIncludeAware(false);
|
||||
domFactory.setExpandEntityReferences(false);
|
||||
domFactory.setNamespaceAware(true);
|
||||
domFactory.setValidating(false);
|
||||
DocumentBuilder builder = domFactory.newDocumentBuilder();
|
||||
|
Loading…
Reference in New Issue
Block a user