Agregue Packj a su flujo de trabajo para auditar sus solicitudes de extracción de dependencias maliciosas/riesgosas de NPM/PYPI/Ruby.
Impulsado por nuestro paquete de herramientas de código abierto.
Packj comentará sobre el PR si se encuentran dependencias riesgosas. Vea el ejemplo de auditoría de solicitud de extracción.

Simplemente agregue lo siguiente a su flujo de trabajo:
- name : Packj Security Audit
uses : ossillate-inc/[email protected]
with :
# TODO: replace with your dependency files in the repo
DEPENDENCY_FILES : pypi:requirements.txt,npm:package.json,rubygems:Gemfile
REPO_TOKEN : ${{ secrets.GITHUB_TOKEN } # This is a basic workflow to help you get started with Actions
name : Packj security audit
# Controls when the workflow will run
on :
pull_request :
branches :
- main
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs :
# This workflow contains a single job called "packj-audit"
packj-security-audit :
# The type of runner that the job will run on
runs-on : ubuntu-latest
# Steps represent a sequence of tasks that will be executed as part of the job
steps :
# Audit
- name : Audit dependencies
uses : ossillate-inc/[email protected]
with :
# TODO: replace with your dependency files in the repo
DEPENDENCY_FILES : pypi:requirements.txt,npm:package.json,rubygems:Gemfile
REPO_TOKEN : ${{ secrets.GITHUB_TOKEN }}secrets.GITHUB_TOKEN se usa de forma predeterminada (GitHub Action Runner)false .Packj puede auditar los paquetes Pypi, NPM y Rubygems . Realiza:
connect , exec ),open() , fork() ).Los paquetes con dominios de correo electrónico vencidos, una gran brecha de tiempo de liberación, API confidenciales, etc. se marcan como riesgosos por razones de seguridad.
El diseño de PackJ se guía por nuestro estudio de 651 muestras de malware de ataques documentados de suministro de software de código abierto. Explica más de 40 atributos de código de riesgo y metadatos que hacen que un paquete sea vulnerable a los ataques de la cadena de suministro.
| Riesgo | Razón |
|---|---|
| Paquetes que se esfuerza paquetes populares | Los malos actores llevan a cabo ataques con error tipográfico de paquetes maliciosos de publicación que se hacen pasar por paquetes populares (por ejemplo, Lodash vs Loadash) |
| Paquetes viejos o de renombre | Los paquetes antiguos o no se mantienen no reciben soluciones de seguridad |
| Paquete utilizando API sensibles, como Exec y Eval | El malware utiliza API del sistema operativo o tiempo de ejecución del idioma para realizar operaciones confidenciales (por ejemplo, leer claves SSH) |
| Paquetes con direcciones de correo electrónico inválidas o no de los contribuyentes | Las direcciones de correo electrónico incorrectas o faltantes sugieren falta de 2FA en la cuenta, lo que facilita a los malos actores secuestrar la propiedad del paquete |
| Paquetes con repositorio de fuente no válida o no | La ausencia de un repositorio público no significa una manera fácil de auditar o revisar el código fuente públicamente |
| Paquetes que contienen vulnerabilidades conocidas | Las vulnerabilidades de seguridad conocidas (CVE) en el código de paquete podrían ser explotadas por malos actores |
Packj se puede personalizar para enviar alertas que se aplican a su modelo de amenaza. Simplemente agregue un archivo .packj.yaml en su repositorio según nuestra plantilla (a continuación) y habilite/deshabilite alertas que le importan.
# # Audit policies # audit: # # Risk alerts (enable or disable according to your threat model) # alerts: # # category: malicious packages (publicly known and unknown) # malicious: contains known malware: - reason: package is known to contain a dangerous malware - enabled: true typo-squatting or repo-jacking package: - reason: package impersonates another popular package to propagate malware - enabled: true # # alert category: packages vulnerable to code exploits # vulnerable: contains known vulnerabilities: - reason: known vulnerabilities (CVEs) in package code could be exploited - enabled: true # # packages with undesirable or "risky" attributes # undesirable: package is old or abandoned: - reason: old or abandoned packages receive no security updates and are risky - enabled: true invalid or no author email: - reason: a package with lack of or invalid author email suggests 2FA not enabled - enabled: true invalid or no homepage: - reason: a package with no or invalid homepage may not be preferable - enabled: false no source repo: - reason: lack of public source repo may suggest malicious intention - enabled: true fewer downloads: - reason: a package with few downloads may not be preferable - enabled: true no or insufficient readme: - reason: a package with lack of documentation may not be preferable - enabled: false fewer versions or releases: - reason: few versions suggest unstable or inactive project - enabled: true too many dependencies: - reason: too many dependencies increase attack surface - enabled: false version release after a long gap: - reason: a release after a long time may indicate account hijacking - enabled: false contains custom installation hooks: - reason: custom installation hooks may download or execute malicious code - enabled: false # WIP # # type: repo stats # few source repo stars: - reason: a package with few repo stars may not be preferable - enabled: false few source repo forks: - reason: a package with few repo forks may not be preferable - enabled: false forked source repo: - reason: a forked copy of a popular package may contain malicious code - enabled: true # # type: APIs and permissions # generates new code: - reason: package generates new code at runtime, which could be malicious - enabled: false forks or exits OS processes: - reason: package spawns new operating system processes, which could be malicious - enabled: false accesses obfuscated (hidden) code: - enabled: true accesses environment variables: - enabled: false changes system/environment variables: - enabled: false accesses files and dirs: - enabled: false communicates with external network: - enabled: false reads user input: - enabled: false sandbox: rules: # # File system (allow or block accesses to file/dirs) # # ~/ represents home dir # . represents cwd dir # # NOTE: only ONE 'allow' and 'block' lines are allowed # fs: # TODO: customize as per your threat model # block access to home dir and all other locations (except the ones below) block: ~/, / allow: ., ~/.cache, ~/.npm, ~/.local, ~/.ruby, /tmp, /proc, /etc, /var, /bin, /usr/include, /usr/local, /usr/bin, /usr/lib, /usr/share, /lib # # Network (allow or block domains/ports) # # NOTE: only ONE 'allow' and 'block' lines are allowed # network: # TODO: customize as per your threat model # block all external network communication (except the ones below) block: 0.0.0.0 # For installing PyPI, Rubygems, and NPM packages allow: pythonhosted.org:443, pypi.org:443, rubygems.org:443, npmjs.org:0, npmjs.com:0