Python: `FlaskApp` instances do not reliably track subclasses

Abierto
#21,854 1 comentario 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
3/5
Tiempo estimado
1-2 días
Aptitud para principiantes
55/100
Tipo de issue
Error
Claridad
Bastante claro
Estado de actividad
Tranquilo
Stack tecnológico
python
Área
security

Línea de trabajo

Comienza en python/ql/lib/semmle/python/frameworks/Flask.qll, en FlaskApp::instance(), y luego reproduce la consulta mínima y el ejemplo de subclase de Python del issue. Confirma que una subclase de Flask se reconoce como una app y que se detecta la ruta para hello; añade o actualiza la prueba de cobertura de la biblioteca correspondiente si encuentras una cerca.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

Python question

I was running a set of queries on the CTFd repository, and got suspiciously few results for endpoints. After some experimenting I found out that they subclass Flask, which the current query for FlaskApp::instance() does not seem to track.

Minimal example:

Query:

import python

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


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

Python:

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() 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.

Lenguaje dominante
CodeQL
Estrellas
10.1k
Forks
2.1k
Merge medio
2 d 10 h
PR fusionados (30 d)
134

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de github/codeql

Todos los issues de github/codeql

Issues similares

Más issues de Security

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.