- ENTRADA 053 -
## Croc, enviando archivos

> Sr. Quatermaster, prepare el túnel, Bond, preparese para el viaje.

```
--- Fecha: jue 30 abr 2026 17:44:35 CET ---
```

Hoy os traigo Croc, abreviatura de Crocodile, que es una implementación de Wormhole con algunas particularidades. Me lo descubrió pinche_compinche@tuiter.rocks en Mastodon, y después de haberlo probado y haber visto que tiene soporte en todas las plataformas, he decidido cambiarlo por Wormhole.

Para quien no conozca Wormhole, dejo aquí un enlace a una entrada que hice:

=> /blog/030_wormhole.gmi Wormhole, enviando archivos

Al igual que Wormhole, Croc es un servicio de envío de archivos, cifrado de extremo a extremo usando PAKE. Para ello utiliza túneles cifrados directos sin almacenamiento de terceros (relé). Este relé genera una frase aleatoria de código, codificada con PAKE, que deberemos intercambiar para poder acceder al contenido.
En cuanto a la seguridad del servicio, decir que ambas soluciones son bastante buenas, y aunque no lo fueran en exceso, tanto Croc como Wormhole están pensados para la transferencia inmediata entre dos personas y los códigos son desechables, por lo que es absurdo para un atacante intentar algo cuando el margen de tiempo para el ataque es tan reducido.

## El por qué del cambio

El tamaño del programa es similar, 4,4 Mb de Wormhole frente a 4 Mb de Croc, bueno, mejor dicho, Wormhole solo ocupa 165 Kb, pero tiene 16 dependencias de Python, así que todo suma:

magic-wormhole: 165k

python3-autobahn: 381k
python3-cffi: 169k
python3-click: 91k
python3-humanize: 64k
python3-idna: 51k
python3-pynacl: 74k
python3-service_identity: 10k
python3-spake2: 33k
python3-tqdm: 60k
python3-txtorcon: 204k
python3-iterable-io: 5.5k
python3-zipstream-ng: 19k
python3-qrcode: 37k
python3-Twisted: 2M
python3-attrs: 56k
python3-automat: 37k
python3-cryptography: 1M

Y ahí viene uno de los motivos. Odio Python y su hiper recargadísimo entorno, su environment y sus mierdas. Como actualices alguna de sus dependencias, es muy posible que deje de funcionar y tengas que volver a instalar en un environment diferente (ya me ha pasado con toot, curseradio y bulky), y ya es que paso de estas cosas.
Croc tiene 0 dependencias, porque está escrito en Go y todo lo tiene resuelto en un binario estático.

Otra de las causas es su rapidez. Es más rápido que wormhole, tanto en la detección a la hora de la descarga, como en la descarga en sí, aunque esto puede ser debido a que el relé está menos saturado, ya que Croc no es aun muy conocido.

## Pequeñas implementaciones

1. Ambos son muy similares, pero Croc tiene algo que mola mucho, y es el resumen de las descargas. En caso de que se corte la descarga, Croc la reanudará donde se había quedado.

2. También soporta múltiples descargas, basta con poner "croc send *.jpg" y a funcionar, en cambio wormhole te responderá con un "Error: Got unexpected extra argument", aunque puedes encadenar archivos uno a uno.

3. Otra de las cosas que me atraen es que puedes especificar el algoritmo de curva elíptica que usará para la transferencia, pudiendo elegir entre p521, p256, p384, SIEC y ED25519.

4. En la opción de enviar directorio, puedes excluir lo que no quieras de ese directorio con el modificador --exclude. También permite la generación de código QR mediante el modificador --qr

5. Y para acabar, puedes elegir una frase aleatoria que quieras, por aquello del miedo a que crackeen el sistema de generación de frases, la predicción, etc, mediante el modificador --code

## Vulnerabilidad

Se descubrió una vulnerabilidad a partir de la versión 9.6.5 mediante la cual se podía efectuar un ataque local de vector, por lo que la frase secreta de la línea de comandos podía ser leída por los usuarios locales que visualicen todos los procesos y sus argumentos.
Para mitigarlo, ahora la frase para recibir debe incorporarse a una variable de entorno, un solución ingeniosa pero tediosa.

=> https://nvd.nist.gov/vuln/detail/CVE-2023-43621 CVE-2023-43621

Pero si eres el único/a/e usuario/a/e de tu equipo, no hay problema, porque puedes lanzar croc con la opción --classic (en un alias, por ejemplo) y funcionará como siempre.

## Tus relés

No sé si Wormhole permite crear tu propio relé. En Croc es tan fácil como lanzar Croc así:

```
croc relay
```

Usará los puertos por defecto 9009-9013, aunque puedes cambiarlos (necesita al menos 2 puertos):

```
croc relay --ports 1111,1112
```

Y luego envías a tu relé así:

```
croc --relay "dirección:puerto" send archivo
```

Si agregas la flag --remember solo tienes que decirle qué relé usar una vez.

> NOTA: Asegúrate de que los puertos estén abiertos en el ruter

Os dejo la web del proyecto, que es muy interesante y además el autor está abierto a cambios y nuevas implementaciones.

=> https://github.com/schollz/croc/tree/main Web del proyecto


Tags: #croc


=> /blog/index.gmi ◄ Listado de entradas
=> /index.gmi ◄◄ Inicio