
Herramienta de análisis estático y dinámico que audita paquetes de código abierto en busca de atributos maliciosos, vulnerables y riesgosos, con instalación en entorno aislado para prevenir ataques a la cadena de suministro.
Packj (pronunciado 'paquete') es una herramienta para ayudar a mitigar los ataques a la cadena de suministro de software. Puede detectar paquetes maliciosos, vulnerables, abandonados, de typo-squatting y otros 'riesgosos' de registros de paquetes de código abierto populares, como NPM, RubyGems y PyPI. Se puede personalizar fácilmente para minimizar el ruido. Packj comenzó como un proyecto de investigación de doctorado y actualmente se desarrolla con diversas subvenciones gubernamentales.
Nota El servidor web autoalojado de Packj y varias integraciones llegarán a finales de este mes 👊 Observa este repositorio para mantenerte actualizado.

Admitimos múltiples modelos de despliegue:
Usa Packj para auditar dependencias en pull requests.```yaml
Ver en GitHub [marketplace](https://github.com/marketplace/actions/packj-security-audit). Ejemplo [PR run](https://github.com/ossillate-inc/packj-github-action-demo/pull/3#issuecomment-1274797138).
### 2. Imagen Docker (recomendada)
La forma más rápida de probar/testear Packj es usando Docker. Podman también es compatible para ejecuciones contenedorizadas (aisladas).```
docker run -v /tmp:/tmp/packj -it ossillate/packj:latest --help
Clona este repositorio,``` git clone https://github.com/ossillate-inc/packj.git && cd packj
Instalar dependencias```
bundle install && pip3 install -r requirements.txt
Comienza con ayuda:``` python3 main.py --help
# Ecosistemas compatibles #
Packj puede evaluar paquetes publicados de los registros de paquetes NPM, PyPI, Rust, PHP y Rubygems. El soporte para Rust y PHP está en desarrollo. Estamos agregando soporte activamente para registros.
También admite la evaluación de paquetes NPM y PyPI locales (no publicados).
| Registro | Ecosistema | Compatible |
| --------- | ---------- | ------------------- |
| NPM | JavaScript | :white_check_mark: |
| PyPI | Python | :white_check_mark: |
| Cargo | Rust | :white_check_mark: |
| Rubygems | Ruby | :white_check_mark: |
| Packagist | PHP | :white_check_mark: |
| Docker | Docker | :x: |
| Nuget | .NET | :white_check_mark: |
| Maven | Java | :white_check_mark: |
| Cocoapods | Swift | :x: |
# Funcionalidad #
Packj ofrece las siguientes herramientas:
* [Auditoría](#auditoría-de-un-paquete) - para evaluar un paquete en busca de atributos "riesgosos".
* [Sandbox](#instalación-aislada-de-paquetes) - para la instalación segura de un paquete.
## Auditoría de un paquete ##
Packj audita paquetes de software de código abierto en busca de atributos "riesgosos" que los hacen vulnerables a ataques a la cadena de suministro. Por ejemplo, paquetes con dominios de correo electrónico caducados (falta de 2FA), gran brecha de tiempo entre versiones, APIs sensibles o permisos de acceso, etc., son marcados como riesgosos.
Se admite la auditoría de:
- múltiples paquetes: `python3 main.py audit -p pypi:requests rubygems:overcommit`
- archivos de dependencias: `python3 main.py audit -f npm:package.json pypi:requirements.txt`
Por defecto, `audit` solo realiza análisis estático de código para detectar código riesgoso. Puede pasar el indicador `-t` o `--trace` para realizar también análisis dinámico de código, que instalará todos los paquetes solicitados bajo `strace` y monitoreará el comportamiento de los paquetes durante la instalación. Vea el ejemplo de salida a continuación.
<details>
<summary><h4>Mostrar ejemplo de ejecución/salida</h4></summary>
$ docker run -v /tmp:/tmp/packj -it ossillate/packj:latest audit --trace -p npm:browserify