
Los módulos facilitan la escritura de aplicaciones de Python, pero cuando usa el código de otras personas (lo que es un módulo), es una buena idea verificar regularmente las vulnerabilidades publicadas.Este artículo te dice cómo usar Auditoría de ideas Una herramienta para encontrar recomendaciones de CVE publicadas para los módulos de Python que usa en su proyecto.
La mayoría de los codificadores de Python enumeran todas las dependencias de terceros en uno requirements.txt
archivo, que es útil para PyPi y otros sistemas de gestión de dependencias:
module1==x.y.z
module2==x.y.z
module1==x.y.z
Esto hace que su entorno de desarrollo sea reproducible, pero también lo expone al uso de versiones anteriores que pueden ser vulnerables.
Piensa en tus ediciones como un jardín: necesitan riego, poda y atención. Un buen proyecto se mantiene actualizado cuando se descubren errores, y herramientas como pip-audit facilitan este trabajo.
Aquí se explica cómo usar pip-audit para escanear su proyecto Python y averiguar si alguna de sus bibliotecas de terceros tiene vulnerabilidades conocidas para los identificadores CVE.
instalar auditoría pip
Instale la última versión de pip-audit pip
:
python3 -m venv ~/virtualenv/pip-audit
$ . ~/virtualenv/pip-audit/bin/activate
$ pip install --upgrade pip pip-audit
Esta pip-audit
comando requiere un requirements.txt
documento.Si su proyecto no lo hace (por ejemplo, si utiliza un solo setup.py
), lo que genera un:
. ~/virtualenv/myprojectvirtualenv/bin/activate
# Install your project as usual, like python setup.py develop
$ pip freeze > requirements.txt
analizar un proyecto
Ahora debería estar listo para comenzar a analizar su proyecto en busca de posibles vulnerabilidades en los módulos.
Ejemplo 1: Proyecto sin vulnerabilidades
Visión 2 es un buen script que combina la salida de los archivos XML de escaneo Nmap con CVE NIST Base de datos de vulnerabilidades. Aquí hay un ejemplo:
$ git clone https://github.com/CoolerVoid/Vision2.git
Cloning into 'Vision2'...
remote: Enumerating objects: 107, done.
remote: Counting objects: 100% (53/53), done.
remote: Compressing objects: 100% (42/42), done.
remote: Total 107 (delta 27), reused 23 (delta 9), pack-reused 54
Receiving objects: 100% (107/107), 30.92 KiB | 2.21 MiB/s, done.
Resolving deltas: 100% (52/52), done.
$ pip-audit --requirement Vision2/re
requirements.txt result_nmap.xml
$ pip-audit --requirement Vision2/requirements.txt
\ Installing package in isolated environment Processing /tmp/tmpyqd6k_6g/termcolor-1.1.0.tar.gz
Preparing metadata (setup.py) ... done
Building wheels for collected packages: termcolor
Building wheel for termcolor (setup.py) ... done
Created wheel for termcolor: filename=termcolor-1.1.0-py3-none-any.whl size=4830 sha256=651435a861c5185b1cfb66655fb1da82488f5fa8b97d7ed859576d61af89f616
Stored in directory: /home/josevnz/.cache/pip/wheels/74/35/a1/85d77e2de196f09e73917aa5b91c278b29efc72d4a800b2ae7
Successfully built termcolor
Installing collected packages: termcolor
Successfully installed termcolor-1.1.0
No known vulnerabilities found
Bien, el proyecto no usa bibliotecas vulnerables.
Ejemplo 2: lector de RSS vulnerable
Habilitar administrador del sistema RSSReader Contiene un paquete que encontró una vulnerabilidad reciente (el proyecto es seguro, pero deliberadamente degradaré una de las bibliotecas en este ejemplo). Analízalo:
instalarlo (ver mi LÉAME Para instrucciones):
$ git clone [email protected]:josevnz/EnableSysadminRssReader.git
$ cd EnableSysadminRssReader
$ sed -i 's#4.7.1#4.6.0#' requirements.txt
Bajé la versión de lxml de 4.7.1 a 4.6.0 (nota sed -i
Pedido). ¿Qué sucede al escanear?
$ pip-audit --requirement requirements.txt
Found 3 known vulnerabilities in 1 packages
Name Version ID Fix Versions
---- ------- -------------- ------------
lxml 4.6.0 PYSEC-2021-19 4.6.3
lxml 4.6.0 PYSEC-2020-62 4.6.2
lxml 4.6.0 PYSEC-2021-852 4.6.5
lxml 4.6.0 tiene una advertencia.
lxml es una buena biblioteca Analice fácilmente los archivos XML. El software es complejo y esta biblioteca tiene un error que se puede aprovechar.Si vas a la base de datos del NIST y buscas lxml verás más detalles sobre la consulta CVE-2021-43818. echar un vistazo requirements.txt
documento:
requests==2.27.1
rich==11.0.0
lxml==4.6.0
La solución más fácil es actualizar a la versión lxml recomendada (4.6.5), ya que es una pequeña actualización con correcciones de errores y cambios mínimos en la API. Después de verificar la última versión (4.7.1) al momento de escribir, decidí usar una versión superior ya que mi código no requiere más modificaciones:
requests==2.27.1
rich==11.0.0
# lxml==4.6.0 <- Vulnerable to CVE-2021-43818
lxml==4.7.1
Si escanea el proyecto nuevamente, obtendrá:
$ pip-audit --requirement /home/josevnz/EnableSysadmin/EnableSysadminRssReader/requirements.txt
No known vulnerabilities found
Con eso fuera del camino, puedo decir mi cita favorita de Poltergeist: "la casa esta limpia. "
¿Puede el IDE decirle si una biblioteca está desactualizada?
Sí puede. Por ejemplo, PyCharm y VS Code le indicarán si hay disponibles versiones más recientes de bibliotecas de terceros. Para este ejemplo, estoy usando una versión obsoleta de Rich:
No debe ignorar estas advertencias.
Comprueba tu código de Python
Voy a resumir algo de lo que has aprendido:
- Puede escanear su proyecto de Python en busca de bibliotecas de terceros Vulnerabilidad Utilice la auditoría de pip.
- Además, puedes ver cómo Envuelva rápidamente su código de Python usar nuevo
setuptools
reglas de embalaje (setup.cfg
ysetup.py
).
Una cosa más: las vulnerabilidades de terceros no son un problema exclusivo de Python, otros lenguajes tienen el mismo problema. En un artículo de seguimiento, le mostraré cómo inspeccionar su código Java.