[Bug] Potential Billion Laughs Attack Vector via Unrestricted XML Parsing in `ZeepSchemaHelper`
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Aptitud para principiantes
- 45/100
Línea de trabajo
Comienza en googleads/common.py, en ZeepSchemaHelper, especialmente en transport.load(endpoint) y la llamada lxml.etree.fromstring(data). Revisa cómo está configurado el analizador XML y añade cobertura para los riesgos reportados de expansión de entidades y acceso a redes externas. Se considera terminado cuando el esquema sigue cargándose, pero el XML no confiable no puede provocar expansión de entidades ni acceso a la red.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Hello Google Ads API Team,
Firstly, thanks so much for your great work!
While using and reviewing the googleads-python-lib, I came across a potential XML parsing issue in the ZeepSchemaHelper class that I'd like to raise for discussion.
I understand that the library is designed to work with trusted WSDL endpoints provided by Google, and this issue is unlikely to be exploitable under normal use. However, for defense-in-depth and potential future-proofing, I wanted to share the finding.
# Affected Source Code: `googleads/common.py`
class ZeepSchemaHelper(GoogleSchemaHelper):
def __init__(self, endpoint, timeout, proxy_config, namespace_override, cache):
...
transport = _ZeepProxyTransport(timeout, proxy_config, cache)
try:
data = transport.load(endpoint) # [Untrusted Input Source: XML from user-supplied endpoint]
except requests.exceptions.HTTPError as e:
raise googleads.errors.GoogleAdsSoapTransportError(str(e))
self.schema = zeep.xsd.Schema(
lxml.etree.fromstring(data) # [VULNERABILITY SINK: unsafe XML parsing]
)
This type of attack leverages recursive entity declarations in XML to cause exponential memory usage like the Billion Laughs attack.
We can set
parser = lxml.etree.XMLParser(
resolve_entities=False,
load_dtd=False,
no_network=True
)
to solve this
- Lenguaje dominante
- Python
- Estrellas
- 749
- Forks
- 967
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de googleads/googleads-python-lib
-
Dificultad 3/5 1-2 días Aptitud para principiantes 35/100
-
Create Native Creative - Issue Abierto
Dificultad 4/5 3-5 días Aptitud para principiantes 25/100
-
image-package Abierto
Dificultad 5/5 Más de una semana Aptitud para principiantes 10/100
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 1/100
-
ad unit statement error. Abierto
Dificultad 4/5 3-5 días Aptitud para principiantes 35/100
Todos los issues de googleads/googleads-python-lib
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
qgis/QGIS-Documentation#11275 ·
-
bug priority:normal ready-for-dev
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
OpenHands/extensions#626 · 1 comentario ·
-
Change observation tooltip text Abierto
Dificultad 1/5 Menos de una hora Aptitud para principiantes 90/100
CSCfi/sd-search-api#39 ·
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 90/100
-
please add to porn list Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
StevenBlack/hosts#3255 ·