[Bug] Potential Billion Laughs Attack Vector via Unrestricted XML Parsing in `ZeepSchemaHelper`
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 3/5
- Temps estimé
- 1-2 jours
- Accessibilité débutants
- 45/100
Piste de recherche
Commencez dans googleads/common.py, au niveau de ZeepSchemaHelper, en particulier transport.load(endpoint) et l’appel lxml.etree.fromstring(data). Examinez la configuration de l’analyseur XML et ajoutez une couverture pour les risques signalés d’expansion d’entités et d’accès au réseau externe. Le travail est terminé lorsque le schéma se charge toujours, tout en empêchant un XML non fiable de déclencher une expansion d’entités ou un accès au réseau.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
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
- Langage dominant
- Python
- Étoiles
- 749
- Forks
- 967
- Métriques de merge des PR
- Aucune PR mergée en 30 j
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de googleads/googleads-python-lib
-
Difficulté 3/5 1-2 jours Accessibilité débutants 35/100
-
Create Native Creative - Issue Ouverte
Difficulté 4/5 3-5 jours Accessibilité débutants 25/100
-
image-package Ouverte
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 10/100
-
Difficulté 1/5 Moins d'une heure Accessibilité débutants 1/100
-
ad unit statement error. Ouverte
Difficulté 4/5 3-5 jours Accessibilité débutants 35/100
Toutes les issues de googleads/googleads-python-lib
Issues similaires
-
Difficulté 2/5 1-3 heures Accessibilité débutants 74/100
bancolombia/sentinel#23 ·
-
test md OuverteCI
Difficulté 2/5 1-3 heures Accessibilité débutants 74/100
-
integration:quickjs org:external priority:backlog topic:code-interpreter topic:middleware type:feature
Difficulté 2/5 1-3 heures Accessibilité débutants 74/100
langchain-ai/deepagents#6450 ·
-
bug client
Difficulté 2/5 1-3 heures Accessibilité débutants 88/100
-
Difficulté 2/5 1-3 heures Accessibilité débutants 74/100