github / github/codeql

Python: `FlaskApp` instances do not reliably track subclasses

Ouverte
#21,854 1 commentaire 0 réactions 0 personnes assignées Voir sur GitHub
Python question
Langage dominant
CodeQL
Étoiles
10.1k
Forks
2.1k
Merge moyen
2 j 18 h
PR mergées (30 j)
152

Description

I was running a set of queries on the [CTFd](https://github.com/CTFd/CTFd) repository, and got suspiciously few results for endpoints. After some experimenting I found out that [they subclass `Flask`](https://github.com/CTFd/CTFd/blob/master/CTFd/__init__.py#L51C1-L91C1), which the current query for `FlaskApp::instance()` does not seem to track.

# Minimal example:
Query:
```plaintext
import python

import semmle.python.frameworks.Flask
import semmle.python.ApiGraphs

from API::Node node
where Flask::FlaskApp::instance() = node
select node
```

Python:
```py
from flask import Flask

class Sub(Flask):
def __init__(self, *args, **kwargs):
Flask.__init__(self, *args, **kwargs)

app = Sub(__name__)

@app.route("/")
def hello():
return "world"
```

CodeQL is not able to identify `Sub` as a Flask app, which means the route setup for `hello` cannot be detected as well.

Adding `.getASubclass*()` to [FlaskApp::instance()](https://github.com/github/codeql/blob/main/python/ql/lib/semmle/python/frameworks/Flask.qll#L76C1-L76C64) would probably fix this. If this can be overridden without changes to the library I am open to suggestions, my knowledge of the QL modules is not that great as of now.

Guide de contribution

Ouvrir le guide de contribution

Piste de recherche

Commencez dans python/ql/lib/semmle/python/frameworks/Flask.qll, au niveau de FlaskApp::instance(), puis reproduisez la requête minimale et l’exemple de sous-classe Python de l’issue. Vérifiez qu’une sous-classe de Flask est reconnue comme une app et que la route pour hello est détectée ; ajoutez ou mettez à jour le test de couverture de bibliothèque correspondant s’il y en a un à proximité.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
python
Domaine
security
Type d'issue
Bug
Difficulté
3/5
Temps estimé
1-2 jours
Activité
Calme
Clarté
Plutôt claire
Accessibilité débutants
55/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.