[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
- 751
- Forks
- 967
- Métriques de merge des PR
- Aucune PR mergée en 30 j
Préparer son environnement
- Aucun Dockerfile ni fichier Docker Compose
- Aucun modèle de pull request
- Lire 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 - IssueOuverte
Difficulté 4/5 3-5 jours Accessibilité débutants 25/100
-
image-packageOuverte
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 72/100
-
EvaluationSuite.run fails with default args_for_task and mutates supplied kwargsPeut-être pris @ktz03 l’a pris aujourd’hui. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
huggingface/evaluate#825 ·
Les mainteneurs répondent en général sous 1 jour
-
Add `django-upgrade` to the CIOuvertedependencies feature github_actions good first issue
Difficulté 2/5 1-3 heures Accessibilité débutants 62/100
wemake-services/wemake-django-template#3149 ·
Les mainteneurs répondent en général sous 1 jour
-
[request] vsg/1.1.16Ouverteupstream update
Difficulté 2/5 1-3 heures Accessibilité débutants 65/100
conan-io/conan-center-index#31142 ·
Les mainteneurs répondent en général sous 1 jour
-
area:core bug
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
Les mainteneurs répondent en général sous 1 jour