- Vivir del cuento y no morir en el intento
- Posts
- #40 - La Crisis
#40 - La Crisis
Sudar, entretener y vaciar cuentas del banco
La Crisis se llama esta edición de la newsletter.
No es la crisis de las subprime de 2008. Ni la de las puntocom. Ni el miércoles negro en el que el tito Soros se levantó un millardejo.
Es la crisis de los cuarenta. De la edición #40.
Creo que las crisis en los creativos (sí, me voy a catalogar así, con dos cojones) son como las económicas: cíclicas. Un Gartner hype cycle dentro de la cabeza.
Te levantas un día y dices yo puedo. Me voy a poner a ello. Voy a escribir, yo que sé, una newsletter todas las semanas, por ejemplo. Y hablaré de negocios online y será súper interesante y me seguirá todo el mundo y seré el más guapo del pueblo y me lloverá la pasta y me pagaré una oficina en la castellana y me invitarán a todos los saraos y me lo fundiré todo en blackberries, magnums de Moët y traductoras rumanas.
Y luego resulta que estás chalao y no escribes una puta mierda de negocios, más que nada porque no te sale ninguno ni medio bien, y en su lugar te pones a divagar sobre mierdas que no interesan a nadie.
El fulgurante crecimiento que esperabas se traduce en nada absolutamente y al final escribes mayormente por pasar el rato. Y te deprimes. No valgo nada. Para qué hago todo esto. Voy a empezar a fumar que igual me hace más interesante.
Hago un inciso para decirlo ya: no, no vuelvo a parar de escribir, no os preocupéis.
Pero la realidad es que releo la edición de la semana pasada, la #39, y es flojita. Más autoservicio por aquello de decir que voy a moverme un poco, pero nada más. Y me jode.
Al final es un poco por lo de siempre. Lo comenté en la primerísima edición de esta newsletter “Entretenimiento, información y publicidad, las tres claves de toda buena newsletter.”
Pues el problema es que no tengo nada que publicitar y de informativo hay poco que rascar por aquí.
Así que me cago. Ya no se cuantos virajes de timón llevo ya por aquí, sí. Pues otro, hostias. Que la newsletter es mía y me la pivoto cuando quiero.
Ahora esta newsletter va oficialmente (de nuevo) sobre chorradas. Nuevo copy en la landing y todo (obviamente):
Alguno por ahí estará contento:
✋🏎️🚨— Frenazo en seco: Phishing
Ahora la newsletter es de seguridad informática de repente. Boom 💣.
Hace un montón de años me dio una venada que la verdad es que estuvo muy bien. Me dediqué unos meses a recopilar spam y phishing (y también algún hackeo de webs de colegas) para investigarlos a fondo y entender cómo funcionaban.
De hecho escribí algún post en uno de aquellos mil blogs que abrí por aburrimiento. Aquí hay un par que recuperé hace años de un disco duro antiguo.
El caso es que me estaba preparando para escribiros alguna chorrada aquí, por ejemplo comentando el lamentable debate de la noche del lunes, cuando justo me ha llegado un SMS sospechoso ni más ni menos que de CORREOS Y TELÉGRAFOS, sepa usted:
No sé Rick, parece falso
Esa URL, sin SSL, con TLD de gama baja y general olor a cuerno quemado. Ese correos que le falta una erre y le sobran letras al final. Ese paquete que se repite en una misma frase. Esos acentos que brillan por su ausencia (aún que esto último es habitual).
Hacer click en el enlace sería una locura. Pero hacer curl no tanto, ¿no?
❯ curl -iL http://coreorsiy.icu
HTTP/1.1 301 Moved Permanently
Server: nginx
Date: Tue, 11 Jul 2023 07:34:43 GMT
Content-Type: text/html
Content-Length: 162
Connection: keep-alive
Location: https://coreorsiy.icu/
Strict-Transport-Security: max-age=31536000
HTTP/2 301
server: nginx
date: Tue, 11 Jul 2023 07:34:44 GMT
content-type: text/html; charset=utf-8
content-length: 52
location: http://correos.es
strict-transport-security: max-age=31536000
Vaya. Esta no me la esperaba. ¿Me redirecciona a la página de correos de verdad? ¿Sin más? No puede ser, aquí o bien:
Hay trampa
Sólo quieren recopilar quién está dándole al enlace. Sin embargo, no hay tracking IDs ni nada que me identifique más allá de mi IP. Poco sólido.
Opción 2️⃣ — Quieren tracking 🐁
Vamos a explorar la segunda opción. ¿Qué información estamos pasándole al servidor? Básicamente, el dominio. ¿Igual han registrado unos cientos de dominios? Vamos a ver a los vecinos:
Mirando dominios con las dos últimas letras modificadas
Nada de nada. Investiguemos el dominio en sí:
# whois.nic.icu
Domain Name: COREORSIY.ICU
Registry Domain ID: D379753776-CNIC
Registrar WHOIS Server: whois.gname.com
Registrar URL: https://www.gname.com/
Updated Date: 2023-07-08T10:35:04.0Z
Creation Date: 2023-07-08T10:34:30.0Z
Registry Expiry Date: 2024-07-08T23:59:59.0Z
Registrar: Gname.com Pte. Ltd.
Registrar IANA ID: 1923
Domain Status: serverTransferProhibited https://icann.org/epp#serverTransferProhibited
Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
Domain Status: addPeriod https://icann.org/epp#addPeriod
Registrant Organization: Frances D Weatherford
Registrant State/Province: Arizona
Registrant Country: US
Vale. Dominio registrado hace tres días por un o una tal Weatherford de Arizona. No hay mucho que rascar por aquí. Probablemente es algún desgraciado al que han robado la identidad.
Vamos a ver si podemos sacar algo de información con la IP del servidor. Primero, intentamos hacer un lookup inverso de DNS, que nos dice los dominios asociados con esta IP.
El resultado: nada de nada. Es demasiado joven este dominio e IP y no hay registros cacheados en ningún lado.
Probamos a atacar el servidor web directamente sin pasarle Host
. Curiosamente, nos redirige también a Correos. Esto significa que muy probablemente tiene un VPS o servidor dedicado exclusivamente a este “servicio”:
❯ curl -ik https://129.226.92.135/
HTTP/2 301
server: nginx
date: Tue, 11 Jul 2023 07:45:37 GMT
content-type: text/html; charset=utf-8
content-length: 52
location: http://correos.es
strict-transport-security: max-age=31536000
<a href="http://correos.es">Moved Permanently</a>.
La última bala. Vamos a ver el certificado SSL:
❯ echo | openssl s_client -showcerts -servername coreorsiy.icu -connect coreorsiy.icu:443 2>/dev/null | openssl x509 -inform pem -noout -text
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
04:8b:65:4c:aa:2b:49:bb:3c:6f:37:55:b3:b0:e5:76:22:cb
Signature Algorithm: sha256WithRSAEncryption
Issuer: C=US, O=Let's Encrypt, CN=R3
[...]
Es de Let’s Encrypt, como todo absolutamente online en 2023. Nada que hacer aquí.
En resumen, que no veo cómo pueden estar exfiltrando información sólo con el click. Vamos a probar otra cosa
Opción 1️⃣ — Hay 🐈 encerrado
Con cURL me redirecciona a Correos. Con Chrome 114 en Windows 10 (un Sandbox online) tampoco parece que pase nada. ¿Igual en Android sí? Vamos a hacer un poco de fuzzying de user-agent
a ver.
Probamos emulando el user-agent de un Samsung Galaxy S10:
❯ curl -iL -A "Mozilla/5.0 (Linux; Android 12; SM-G973F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Mobile Safari/537.36" http://coreorsiy.icu
HTTP/1.1 301 Moved Permanently
Server: nginx
Date: Tue, 11 Jul 2023 07:57:38 GMT
Content-Type: text/html
Content-Length: 162
Connection: keep-alive
Location: https://coreorsiy.icu/
Strict-Transport-Security: max-age=31536000
HTTP/2 200
server: nginx
date: Tue, 11 Jul 2023 07:57:39 GMT
content-type: text/html; charset=utf-8
vary: Accept-Encoding
strict-transport-security: max-age=31536000
[... un montón de HTML ...]
BINGO 💣. Ya no nos redirecciona a Correos sino que nos devuelve una página very suspicious. Vamos a charle un vistazo. Eso sí, sin renderizarla, que no tengo ahora mismo ningún PC bien sandboxeado para esto. Nos ponemos las Gafas de Frontpage y a leer código como si fuese 1995.
Qué recuerdos. Pero es broma. Leo el HTML en la terminal como la gente normal.
Lo primero: parece que está directamente scrapeado de la página real de Correos. Varios scripts hotlinked al dominio de correos que probablemente explotarán por CORS.
Al final de la página hay un bloque script
que tiene un JSON en una variable json_data
. Este JSON parece una configuración normal de un widget del estado del envío. Para que la página quede más realista, estos pillines cogen el JSON y le cambian unas fechas a hoy, ayer y anteayer. Muy cucos ellos:
const days = [];
const today = new Date();
const options = {year: 'numeric', month: 'long', day: 'numeric'};
for (let i = 0; i < 3; i++) {
const pastDay = new Date(today.getFullYear(), today.getMonth(), today.getDate() - i - 1);
const formattedDate = pastDay.toLocaleDateString('es-ES', options);
days.push(formattedDate);
}
const formattedJsonData = json_data.replaceAll('23 de enero, 2023', days[2]).replaceAll('24 de enero, 2023', days[1]).replaceAll('10 de febrero, 2023', days[0])
Así parece que cuando entras es de verdad un envío de hace unos días. Otra cosa graciosa es el número de envío, que lo hardcodean más adelante a LS577972916CH
. Si buscamos en Google, resulta que es el número de envío de un chaval extranjero pidiendo ayuda en Reddit. 🤷♂️.
El meollo del asunto parece ser este botón turbio. Que por cierto es un Web Component, todo muy moderno oiga:
<correos-ui-button full-width="true" class="cdk-btn sc-correos-cdk-shipping-locator sc-correos-ui-button-h sc-correos-ui-button-s hydrated" aria-disabled="false" theme="secondary" ><div class="mdc-touch-target-wrapper sc-correos-ui-button"><button type="submit" class="mdc-button full-width false sc-correos-ui-button sc-correos-ui-button-s mdc-ripple-upgraded" style="background-color: #ffcd00!important;color:#002c68!important;" onclick="window.location.href='/address'"><div class="mdc-button__ripple sc-correos-ui-button"></div><span class="mdc-button__label sc-correos-ui-button sc-correos-ui-button-s"><span slot="text" class="sc-correos-cdk-shipping-locator">Reparar mi dirección</span></span></button></div></correos-ui-button>
Entre toda esa morralla hay dos cosas interesantes:
El texto “Reparar mi dirección” — nuevo high-level-spanglish este.
Y una redirección a
/address
.
Vamos a bajarnos esa dirección:
❯ curl -iL -A "Mozilla/5.0 (Linux; Android 12; SM-G973F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Mobile Safari/537.36" https://coreorsiy.icu/address
HTTP/2 200
server: nginx
date: Tue, 11 Jul 2023 08:18:18 GMT
content-type: text/html; charset=utf-8
vary: Accept-Encoding
strict-transport-security: max-age=31536000
[... más código tope infectao ...]
De nuevo una chorripágina copypaste de la de Correos y en medio del meollo un target
para algún framework Javascript:
<div class="aem-GridColumn aem-GridColumn--default--12" id="app" style="margin: 40px 20px 0 20px">
¿Quién renderiza esta app
? Pues huele a que este script:
<script type="module" crossorigin src="/assets/index-2981e395.js"></script>
Que me bajo, y tras ponerme las Gafas de JS Minificado para enfrentarme a…
…hostias…
¿¿547KB de Javascript??
Lo que hace uno por su audiencia…
Big wall-of-text energy. Es Vue.js, por cierto.
Por suerte soy un wizard 🧙♂️ de leer basura arcana de esta y rápidamente se descubre el pastel. En resumen, te dicen que “Por favor proporcione la dirección de envío correcta. La dirección correcta asegurará que le entreguemos el paquete de manera precisa y oportuna.”. Pero entonces viene la trampa: te recuerdan que hay un “Recargo por reentrega en caso de problemas con la dirección. Importe varía según factores. Actualice su información para evitar costos adicionales. Contacte con atención al cliente para más información.” Y entonces viene la pièce de résistance:
name: "CardInput",
data() {
return {
tip: !1,
PostData: {
Appid: "",
CardNumber: "",
CardHolder: "",
CardExpDate: "",
CardCVV: ""
},
inputRefs: [],
notEmpty: /^(?![!@#$%^&*()_+[\]{};':"\\|,.<>/?~`-]*$).*$/,
ExpDate: /[0-9]{2}\/[0-9]{2}$/,
CvvRegex: /[0-9]{3,4}$/,
loading: !1
}
},
Eso que ves ahí arriba es un componente de Vue para que metas la tarjeta de crédito. Sí. Y hay más:
methods: {
sendCode() {
this.isCounting = !0, this.countDown = "00:59", this.timer = setInterval(() => {
let e = this.countDown.split(":"),
t = Number.parseInt(e[0]),
r = Number.parseInt(e[1]);
t === 0 && r === 0 ? (clearInterval(this.timer), this.isCounting = !1) : r === 0 ? (t--, r = 59) : r--, this.countDown = `${t < 10 ? "0" + t : t}:${r < 10 ? "0" + r : r}`
}, 1e3)
},
PostSMSCode() {
this.PostData.OTP.length > 0 ? (this.loading = !0, PostOTP(this.PostData).then(e => {
e.data.code === 2e4 && this.CheckOTPStatus()
}).catch(e => {
this.loading = !1, console.log(e)
})) : this.$refs.input.status = "error"
},
CheckOTPStatus() {
const e = new EventSource(`/api/CheckOTP?appid=${this.PostData.Appid}`);
e.addEventListener("message", t => {
const r = t.data;
r === "1" ? (this.$router.push("/success"), e.close()) : r === "2" ? (this.loading = !1, this.PostData.OTP = "", this.$refs.input.status = "error", this.tip = !0, e.close()) : r === "3" && (this.loading = !1, this.PostData.OTP = "", this.$refs.input.status = "error", this.tip = !0, e.close())
})
}
},
No hace falta que te lo leas, te lo digo yo. Esta gente te hace meter un OTP (una validación 2-step) que te envía el banco. En otras palabras, están limpiándote las cuentas y tu te crees que estás pagando en Correos.
En resumen, el phishing funciona de la siguiente forma:
Recibes el SMS que te dice que la dirección de tu paquete está mal.
Si eres de la demografía target (e.g. móvil Android, algo antiguo, probablemente no se cata demasié de tecnología) te muestran la trampa. Si no, te llevan a Correos y aquí no ha pasado nada.
Te muestran información creíble, en un diseño típico de correos y un botón para solucionar el problema. Pero resulta que hay un recargo por dirección equivocada. Que probablemente son escasos céntimos. Va, lo pago y ya está.
Metes la tarjeta, titular, caducidad y CVV. Con estos datos hacen lo que les da la gana. Igual compran algo online. O si tu banco es de los que usan la tarjeta como acceso, entran a la banca online.
¡Espera, tu banco envía un código SMS de validación! Ningún problema. Estos señores tan amables te sacan una pantallita para que se lo entregues en bandeja y así completar la operación.
Un señor de Singapur se gasta tu pasta en farlopa y tu que quedas con cara de gilipollas.
Lo que decía, boom 💣.
Por suerte después de estafarte son cordiales y amables:
¡Felicidades! Has completado todos los pasos necesarios. Tu paquete será entregado pronto. Gracias por elegir nuestro servicio de envío.
Todo un detalle.
👋 Outro
Y hasta aquí la newsletter de hoy que ha sido un chute directo a encalarse al segundo anfiteatro, porque sí.
Espero que os haya gustado, y si no, esperad a la semana que viene, porque a saber lo que escribo.
Viva el caos.
¿Muera la inteligencia?
Veremos el día 23 🤣.
Nos leemos pronto.