
ProtoPom=>Pom
Dependency
MavenRepo
Named

from ProtoPom ppselect pp.getArtifact(),pp.getGroup(),pp.getShortCoordinate(),pp.getVersionString()

查看POM文件是否包含指定的依赖
import semmle.code.xml.MavenPomfrom Dependency depwhere dep.getShortCoordinate() in ["com.alibaba:fastjson"] ordep.getGroup().getValue() = "org.apache.poi"select dep,dep.getShortCoordinate(), dep.getVersionString()

在POM文件中,MavenPom::Version.getValue()谓词可以直接识别
<properties><fastjson.version>1.2.11</fastjson.version></properties><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>${fastjson.version}</version></dependency>
getTextValue()方法获得的是${fastjson.version}
getValue()方法获得的是1.2.11
案例
查询POM文件中FastJSON的版本号,如果存在漏洞,则通过调用链构造出入口URL
1、判断版本号
import semmle.code.xml.MavenPomfrom Dependency depwhere dep.getShortCoordinate() = "com.alibaba:fastjson" anddep.getVersion().getValue().regexpMatch("1\\.2\\.[0-4][0-7]")select dep, dep.getShortCoordinate(), dep.getVersion().getValue()

2、匹配调用链
3、构造入口URL
