• Tom Lane's avatar
    Prevent access to external files/URLs via XML entity references. · 17351fce
    Tom Lane authored
    xml_parse() would attempt to fetch external files or URLs as needed to
    resolve DTD and entity references in an XML value, thus allowing
    unprivileged database users to attempt to fetch data with the privileges
    of the database server.  While the external data wouldn't get returned
    directly to the user, portions of it could be exposed in error messages
    if the data didn't parse as valid XML; and in any case the mere ability
    to check existence of a file might be useful to an attacker.
    
    The ideal solution to this would still allow fetching of references that
    are listed in the host system's XML catalogs, so that documents can be
    validated according to installed DTDs.  However, doing that with the
    available libxml2 APIs appears complex and error-prone, so we're not going
    to risk it in a security patch that necessarily hasn't gotten wide review.
    So this patch merely shuts off all access, causing any external fetch to
    silently expand to an empty string.  A future patch may improve this.
    
    In HEAD and 9.2, also suppress warnings about undefined entities, which
    would otherwise occur as a result of not loading referenced DTDs.  Previous
    branches don't show such warnings anyway, due to different error handling
    arrangements.
    
    Credit to Noah Misch for first reporting the problem, and for much work
    towards a solution, though this simplistic approach was not his preference.
    Also thanks to Daniel Veillard for consultation.
    
    Security: CVE-2012-3489
    17351fce
xml_1.out 39.6 KB