
Programas de ejemplo en Go, Java, Node, Perl, Python, Ruby, Rust y curl que comprueban si un almacén de confianza TLS rechaza conexiones a sitios conocidos como maliciosos de la CA eMudhra.
https://emudhra.we-have-a-problem.com/
Claro, tus navegadores hacen lo correcto, pero TLS ocurre en bastantes más lugares que solo en el navegador. Así que necesitas comprobar todos los lugares donde un paquete podría esconderse. ¡Qué fastidio!
No tengo una solución para ti, lo siento. Pero si solo quieres comprobar si un lenguaje concreto hace lo correcto de fábrica, aquí tienes algunos programas de ejemplo sencillos. Cada uno devolverá silenciosamente nada (porque esa es la forma Unix) si todo está en orden y reportará un error si puede conectarse a los sitios maliciosos conocidos.
La herramienta usará lo que sea el valor predeterminado para el framework/lenguaje dado, pero también puedes especificar un paquete alternativo contra el que comprobar. Si sabe cómo, mostrará qué paquete / ruta usó.
$ go run emudhra.go
$ go run emudhra.go /tmp/cert.pem.bad
BAD: successful connection to https://dv-g3b-aaa-emudhra.we-have-a-problem.com/
BAD: successful connection to https://dv-g3b-emudhra.we-have-a-problem.com/
exit status 2
$
$ java emudhra.java
Using CA file: /opt/homebrew/Cellar/openjdk/23.0.2/libexec/openjdk.jdk/Contents/Home/lib/security/cacerts
BAD: successful connection to https://dv-g3b-aaa-emudhra.we-have-a-problem.com/
BAD: successful connection to https://dv-g3b-emudhra.we-have-a-problem.com/
$ java emudhra.java /etc/ssl/cert.pem
Using CA file: /etc/ssl/cert.pem
$
Considera añadir los intermedios a tu
blocked.certs como se explica
aquí.
$ node emudhra.js
$ node emudhra.js /tmp/cert.pem.bad
BAD: successful connection to https://dv-g3b-aaa-emudhra.we-have-a-problem.com/
BAD: successful connection to https://dv-g3b-emudhra.we-have-a-problem.com/
$
$ perl emudhra.pl
Using SSL_ca_file: /private/etc/ssl/cert.pem
$ perl emudhra.pl /tmp/cert.pem.bad
Using SSL_ca_file: /tmp/cert.pem.bad
BAD: successful connection to https://dv-g3b-aaa-emudhra.we-have-a-problem.com/
BAD: successful connection to https://dv-g3b-emudhra.we-have-a-problem.com/
$
$ python3 emudhra.py
Using CA file: /opt/homebrew/etc/openssl@4/cert.pem
$ python3 emudhra.py /tmp/cert.pem.bad
Using CA file: /tmp/cert.pem.bad
BAD: successful connection to https://dv-g3b-aaa-emudhra.we-have-a-problem.com/
BAD: successful connection to https://dv-g3b-emudhra.we-have-a-problem.com/
$
$ ruby emudhra.rb
Using CA file: /usr/lib/ssl/cert.pem
$ ruby emudhra.rb /tmp/cert.pem.bad
Using CA file: /tmp/cert.pem.bad
BAD: successful connection to https://dv-g3b-aaa-emudhra.we-have-a-problem.com/
BAD: successful connection to https://dv-g3b-emudhra.we-have-a-problem.com/
$
$ sh emudhra.sh
Used CA file: /etc/ssl/certs/ca-certificates.crt
$ sh emudhra.sh
/tmp/cert.pem.bad
Used CA file: /tmp/cert.pem.bad
BAD: successful connection to https://dv-g3b-aaa-emudhra.we-have-a-problem.com/
BAD: successful connection to https://dv-g3b-emudhra.we-have-a-problem.com/
$
Nota: en macOS, puedes pedirle a curl(1) que use el
backend nativo, que entonces rechaza la conexión en
todos los casos:
$ CURL_SSL_BACKEND=secure-transport sh emudhra.sh /tmp/cert.pem.bad
Used CA file:
$
$ cd rs
$ cargo run
Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.35s
Running `target/debug/rs`
$ cargo run -- /tmp/cert.pem.bad
Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.17s
Running `target/debug/rs /tmp/cert.pem.bad`
$
En algún lugar de sus dependencias, Rust hace una comprobación real de listas de bloqueo sobre los intermedios comprometidos, así que incluso con un paquete que confía en la raíz de eMudhra, falla al conectar.