image.png
    ProtoPom=>Pom
    Dependency
    MavenRepo
    Named
    image.png
    image.png

    1. from ProtoPom pp
    2. select pp.getArtifact(),pp.getGroup(),pp.getShortCoordinate(),pp.getVersionString()

    image.png
    查看POM文件是否包含指定的依赖

    1. import semmle.code.xml.MavenPom
    2. from Dependency dep
    3. where dep.getShortCoordinate() in ["com.alibaba:fastjson"] or
    4. dep.getGroup().getValue() = "org.apache.poi"
    5. select dep,dep.getShortCoordinate(), dep.getVersionString()

    image.png
    在POM文件中,MavenPom::Version.getValue()谓词可以直接识别

    1. <properties>
    2. <fastjson.version>1.2.11</fastjson.version>
    3. </properties>
    4. <dependency>
    5. <groupId>com.alibaba</groupId>
    6. <artifactId>fastjson</artifactId>
    7. <version>${fastjson.version}</version>
    8. </dependency>

    getTextValue()方法获得的是${fastjson.version}
    getValue()方法获得的是1.2.11
    image.png
    案例

    查询POM文件中FastJSON的版本号,如果存在漏洞,则通过调用链构造出入口URL
    1、判断版本号

    1. import semmle.code.xml.MavenPom
    2. from Dependency dep
    3. where dep.getShortCoordinate() = "com.alibaba:fastjson" and
    4. dep.getVersion().getValue().regexpMatch("1\\.2\\.[0-4][0-7]")
    5. select dep, dep.getShortCoordinate(), dep.getVersion().getValue()

    image.png
    2、匹配调用链

    3、构造入口URL