Skip to content

gh-127502: Update XML vulnerability table #135294

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 4 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 3 additions & 4 deletions Doc/library/pyexpat.rst
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,10 @@
references to these attributes should be marked using the :member: role.


.. warning::
.. note::

The :mod:`pyexpat` module is not secure against maliciously
constructed data. If you need to parse untrusted or unauthenticated data see
:ref:`xml-vulnerabilities`.
If you need to parse untrusted or unauthenticated data, see
:ref:`xml-security`.


.. index:: single: Expat
Expand Down
2 changes: 1 addition & 1 deletion Doc/library/security_warnings.rst
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ The following modules have specific security considerations:
<subprocess-security>`
* :mod:`tempfile`: :ref:`mktemp is deprecated due to vulnerability to race
conditions <tempfile-mktemp-deprecated>`
* :mod:`xml`: :ref:`XML vulnerabilities <xml-vulnerabilities>`
* :mod:`xml`: :ref:`XML security <xml-security>`
* :mod:`zipfile`: :ref:`maliciously prepared .zip files can cause disk volume
exhaustion <zipfile-resources-limitations>`

Expand Down
7 changes: 3 additions & 4 deletions Doc/library/xml.dom.minidom.rst
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,10 @@ not already proficient with the DOM should consider using the
:mod:`xml.etree.ElementTree` module for their XML processing instead.


.. warning::
.. note::

The :mod:`xml.dom.minidom` module is not secure against
maliciously constructed data. If you need to parse untrusted or
unauthenticated data see :ref:`xml-vulnerabilities`.
If you need to parse untrusted or unauthenticated data, see
:ref:`xml-security`.


DOM applications typically start by parsing some XML into a DOM. With
Expand Down
7 changes: 3 additions & 4 deletions Doc/library/xml.dom.pulldom.rst
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,10 @@ responsible for explicitly pulling events from the stream, looping over those
events until either processing is finished or an error condition occurs.


.. warning::
.. note::

The :mod:`xml.dom.pulldom` module is not secure against
maliciously constructed data. If you need to parse untrusted or
unauthenticated data see :ref:`xml-vulnerabilities`.
If you need to parse untrusted or unauthenticated data, see
:ref:`xml-security`.

.. versionchanged:: 3.7.1

Expand Down
7 changes: 3 additions & 4 deletions Doc/library/xml.etree.elementtree.rst
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,10 @@ for parsing and creating XML data.
The :mod:`!xml.etree.cElementTree` module is deprecated.


.. warning::
.. note::

The :mod:`xml.etree.ElementTree` module is not secure against
maliciously constructed data. If you need to parse untrusted or
unauthenticated data see :ref:`xml-vulnerabilities`.
If you need to parse untrusted or unauthenticated data, see
:ref:`xml-security`.

Tutorial
--------
Expand Down
36 changes: 9 additions & 27 deletions Doc/library/xml.rst
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,10 @@ XML Processing Modules

Python's interfaces for processing XML are grouped in the ``xml`` package.

.. warning::
.. note::

The XML modules are not secure against erroneous or maliciously
constructed data. If you need to parse untrusted or
unauthenticated data see the :ref:`xml-vulnerabilities` and
:ref:`defusedxml-package` sections.
If you need to parse untrusted or unauthenticated data, see
:ref:`xml-security`.

It is important to note that modules in the :mod:`xml` package require that
there be at least one SAX-compliant XML parser available. The Expat parser is
Expand All @@ -47,12 +45,11 @@ The XML handling submodules are:
* :mod:`xml.parsers.expat`: the Expat parser binding


.. _xml-vulnerabilities:
.. _xml-security:

XML vulnerabilities
-------------------
XML security
------------

The XML processing modules are not secure against maliciously constructed data.
An attacker can abuse XML features to carry out denial of service attacks,
access local files, generate network connections to other machines, or
circumvent firewalls.
Expand All @@ -63,12 +60,12 @@ the various modules are vulnerable to them.
========================= ================== ================== ================== ================== ==================
kind sax etree minidom pulldom xmlrpc
========================= ================== ================== ================== ================== ==================
billion laughs **Vulnerable** (1) **Vulnerable** (1) **Vulnerable** (1) **Vulnerable** (1) **Vulnerable** (1)
quadratic blowup **Vulnerable** (1) **Vulnerable** (1) **Vulnerable** (1) **Vulnerable** (1) **Vulnerable** (1)
billion laughs Safe (1) Safe (1) Safe (1) Safe (1) Safe (1)
quadratic blowup Safe (1) Safe (1) Safe (1) Safe (1) Safe (1)
external entity expansion Safe (5) Safe (2) Safe (3) Safe (5) Safe (4)
`DTD`_ retrieval Safe (5) Safe Safe Safe (5) Safe
decompression bomb Safe Safe Safe Safe **Vulnerable**
large tokens **Vulnerable** (6) **Vulnerable** (6) **Vulnerable** (6) **Vulnerable** (6) **Vulnerable** (6)
large tokens Safe (6) Safe (6) Safe (6) Safe (6) Safe (6)
========================= ================== ================== ================== ================== ==================

1. Expat 2.4.1 and newer is not vulnerable to the "billion laughs" and
Expand Down Expand Up @@ -126,21 +123,6 @@ large tokens
be used to cause denial of service in the application parsing XML.
The issue is known as :cve:`2023-52425`.

The documentation for :pypi:`defusedxml` on PyPI has further information about
all known attack vectors with examples and references.

.. _defusedxml-package:

The :mod:`!defusedxml` Package
------------------------------

:pypi:`defusedxml` is a pure Python package with modified subclasses of all stdlib
XML parsers that prevent any potentially malicious operation. Use of this
package is recommended for any server code that parses untrusted XML data. The
package also ships with example exploits and extended documentation on more
XML exploits such as XPath injection.


.. _Billion Laughs: https://en.wikipedia.org/wiki/Billion_laughs
.. _ZIP bomb: https://en.wikipedia.org/wiki/Zip_bomb
.. _DTD: https://en.wikipedia.org/wiki/Document_type_definition
7 changes: 3 additions & 4 deletions Doc/library/xml.sax.rst
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,10 @@ SAX exceptions and the convenience functions which will be most used by users of
the SAX API.


.. warning::
.. note::

The :mod:`xml.sax` module is not secure against maliciously
constructed data. If you need to parse untrusted or unauthenticated data see
:ref:`xml-vulnerabilities`.
If you need to parse untrusted or unauthenticated data, see
:ref:`xml-security`.

.. versionchanged:: 3.7.1

Expand Down
4 changes: 2 additions & 2 deletions Doc/library/xmlrpc.client.rst
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,8 @@ between conformable Python objects and XML on the wire.
.. warning::

The :mod:`xmlrpc.client` module is not secure against maliciously
constructed data. If you need to parse untrusted or unauthenticated data see
:ref:`xml-vulnerabilities`.
constructed data. If you need to parse untrusted or unauthenticated data,
see :ref:`xml-security`.

.. versionchanged:: 3.5

Expand Down
4 changes: 2 additions & 2 deletions Doc/library/xmlrpc.server.rst
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@ servers written in Python. Servers can either be free standing, using
.. warning::

The :mod:`xmlrpc.server` module is not secure against maliciously
constructed data. If you need to parse untrusted or unauthenticated data see
:ref:`xml-vulnerabilities`.
constructed data. If you need to parse untrusted or unauthenticated data,
see :ref:`xml-security`.

.. include:: ../includes/wasm-notavail.rst

Expand Down
Loading