5.3.11. 常见Sink¶
5.3.11.1. 命令执行/注入¶
java.lang.Runtime.getRuntime().exec()
java.lang.ProcessBuilder
5.3.11.2. XXE¶
java.net.bull.javamelody.PayloadNameRequestWrapper
javax.xml.bind.Unmarshaller
javax.xml.parsers.DocumentBuilderFactory
javax.xml.parsers.SAXParser
javax.xml.stream.XMLStreamReader
javax.xml.transform.sax.SAXSource
javax.xml.transform.sax.SAXTransformerFactory
javax.xml.transform.TransformerFactory
javax.xml.validation.SchemaFactory
javax.xml.validation.Validator
javax.xml.xpath.XpathExpression
org.apache.commons.digester3.Digester
org.apache.ofbiz.base.util.UtilXml
org.dom4j.io.SAXReader
org.jdom.input.SAXBuilder
org.jdom2.input.SAXBuilder
org.xml.sax.helpers.XMLReaderFactory
org.xml.sax.XMLReader
5.3.11.3. SSRF¶
HttpClient.execute
HttpClients.execute
HttpURLConnection.getInputStream
ImageIO.read
OkHttpClient.newCall.execute
Request.Get.execute
Request.Post.execute
URL.openStream
URLConnection.getInputStream
5.3.11.4. 反序列化¶
5.3.11.4.1. 相关Sink函数¶
JSON.parseObject
ObjectInputStream.readObject
ObjectInputStream.readUnshared
ObjectMapper.readValue
XMLDecoder.readObject
XStream.fromXML
Yaml.load
5.3.11.4.2. Magic Call¶
以下的魔术方法都会在反序列化过程中被自动的调用。
readObject
readExternal
readResolve
readObjectNoData
validateObject
finalize
5.3.11.4.3. 主流JSON库¶
主流的JSON库有Gson、Jackson、Fastjson等,因为JSON常在反序列化中使用,所以相关库都有较大的影响。
其中Gson默认只能反序列化基本类型,如果是复杂类型,需要程序员实现反序列化机制,相对比较安全。
Jackson除非指明@jsonAutoDetect,Jackson不会反序列化非public属性。在防御时,可以不使用enableDefaultTyping方法。相关CVE有CVE-2017-7525、CVE-2017-15095。
FastJson是阿里巴巴的开源JSON解析库,支持将Java Bean序列化为JSON字符串,也支持从JSON字符串反序列化到Java Bean,相关CVE有CVE-2017-18349等。
FastJson常见的Sink点有:
JSON.toJSONString
JSON.parseObject
JSON.parse