Hackeando con matemáticas y números.

Esto podría ser aparente para cualquiera que haya estado trabajado en seguridad por algún tiempo, pero yo (siendo un noob) recientemente descubrí una propiedad muy interesante respecto a los números.

Consideremos en código a continuación:

    <?php
    $amount = $_GET['amount'];
    $price = '300';
    $user_balance = user_balance_get();

    // Actualizamos el balance del usuario para reflejar la compra.
    $user_balance = $user_balance - ($price * $amount);
    user_balance_set($user_balance);

Los números tienen una gran cantidad de propiedades que tenemos que considerar a la hora de testear la seguridad de una aplicación, que, nuevamente, son obvias para la gente inteligente pero siempre es importante repetir para aclarar.

  •  Multiplicar un número negativo por un número positivo nos va a dar como resultado un número negativo.
  • Al sumar un número positivo con un número negativo, se substraerá el valor absoluto del número negativo al número positivo. (por ej. 300 + (-200) va a dar como resultado 100.)
  • Lo inverso tambien es cierto. Restar un número negativo a un número positivo resultará en una suma.

Cosas básicas. Aplicar esto a la seguridad informática, sin embargo, es interesante. Viendo el código que escribí mas arriba, y habiendo mencionado los hechos que acabo de mencionar, debería ser aparente que el código es vulnerable.

La línea de código responsable de actualizar el balance de los usuarios (una operación muy riesgosa, desde el punto de vista de la seguridad) es:

    $user_balance = $current_user_balance - ($price_of_item * $user_submitted_quantity)

Esto es interesante porque nos permite aumentar el balance del atacante enviando números negativos. Si ponemos -1 en la cantidad, por ejemplo, sucedería lo siguiente:

    $user_balance = 1000 - (300 * -1)
    $user_balance = 1000 - ( -300 )
    $user_balance = 1300

Ka-ching! Así da gusto ir a comprar cosas.

El nuevo balance es mayor que el balance anterior, lo que significa que logramos una ganancia con esa compra. Otra situación que puede demostrarse como muy enriquecedora para nosotros como atacantes, es si pudieramos transferir plata entre diferentes usuarios (como por ejemplo, el sistema de transferencias de paypal, o un banco).

Consideremos el siguiente código:

    <?php
    $receiver = User(id=1);
    $sender = User(id=2);

    $amount = $_GET['amount'];

    $receiver->balance_set($receiver->balance + $amount);
    $sender->balance_set($sender->balance - $amount);

Parece bastante sencillo, y no particularmente inseguro. Poniendo un número negativo en el parametro “amount”, sin embargo, va a causar que el balance de la persona que reciba la transferencia disminuya, mientras que el balance de la persona que envía el dinero aumentará. En una manera muy real, el emisor esta robando dinero del receptor.

Antes de cerrar el post, otras cosas que pueden ser interesantes cuando lidiamos con aplicaciones son:

  • Integer overflows. Enviar un número muy grande (o muy pequeño, en los negativos), puede tener como consequencia que evitemos filtros como “solo números menores a X”, o viceversa.
  • Checkear que la aplicación no acepte operaciones matemáticas en lugar de números, como por ejemplo “10 + 10 + 10 + 10″
  •  A veces las aplicaciones pueden checkear por algo, por ejemplo, que el número sea menor a 50, y luego convierten el número a su valor absoluto. En esos casos, puedes enviar un gran número negativo y evitar el filtro.

Un abrazo grande,
Pedro

Vulnerabilidad CRITICA OpenSSL

Hola a todos,

Escribo este post para advertir respecto a la vulnerabilidad recientemente descubierta en OpenSSL (CVE-2014-0160).

Extremadamente importante actualizar todo tipo de software, especialmente del lado del servidor. El bug permite a un atacante obtener contenidos de la memoria sin dejar rastros, por lo cual en sistemas en los que la seguridad es una prioridad, este es un buen momento para rotar llaves privadas.

EDIT: WordPress me cago la indentación y caracteres varios. Recomiendo obtener el codigo para atacar servidores de aca, aca hay un modulo de metasploit. Aca hay información teórica sobre el bug.

Este es el código para atacar clientes, y esta es la informacion teórica respecto al ataque contra clientes.

EDIT 2: Mucha mas informacion acá.

MITMProxy, Kraken y identificación

¡Hola a todos!

Hace poco comenté que Kraken, un bitcoin exchange, ofrecía un Bug Bounty. En la búsqueda de fallos, me encontré que el API de Kraken tiene un medio de identificación bastante poco estándar.

Está descrito acá, pero les dejo un poco de código, en python y usando mitmproxy, que sirve para manejar eso de manera automática. Para hacer funcionar esto, ejecutar este script (potencialmente cambinado el puerto para evitar conflictos), y luego configurar ZAP o Burp para que utilizen el proxy como “parent proxy”.

También, importante instalar mitmproxy (pip install mitmproxy).


#!/usr/bin/env python

"""
This MITM proxy example grabs a request that comes through and analyzes the
data, creates a valid HMAC-SHA512 signature and puts those into the headers, as
required by kraken, the bitcoin exchange in it's API.

Be sure to change the contents of key and secret.
"""
from libmproxy import controller, proxy
import os
import re
import time
import hashlib
import hmac
import base64

key = ""
secret = ""

class StickyMaster(controller.Master):
    def __init__(self, server):
        controller.Master.__init__(self, server)
        self.stickyhosts = {}

    def run(self):
        try:
            return controller.Master.run(self)
        except KeyboardInterrupt:
            self.shutdown()

    def handle_request(self, msg):
        # strip nonce
        new_content = re.sub("nonce=.*?&", "", msg.content)
        nonce = int(1000*time.time())
        new_content += "&nonce=" + str(nonce)

        msg.content = new_content

        new_headers = self.headers_signature(msg.path, new_content, nonce)

        msg.headers["API-Key"] = [new_headers["API-Key"]]
        msg.headers["API-Sign"] = [new_headers["API-Sign"]]
        print msg.headers

        msg.reply()


    def headers_signature(self, request_path, postdata, nonce):
        headers = {}

        message = request_path + hashlib.sha256(str(nonce) +
            postdata).digest()
        signature = hmac.new(base64.b64decode(secret),
            message, hashlib.sha512)

        headers['API-Key'] = key
        headers['API-Sign'] = base64.b64encode(signature.digest())

        return headers


config = proxy.ProxyConfig(
    cacert = os.path.expanduser("~/.mitmproxy/mitmproxy-ca.pem")
)
server = proxy.ProxyServer(config, 8080)
m = StickyMaster(server)
m.run()


 

Compilado de enlaces

NIhao!

Este es un compilado de enlaces:

Y ta!
Un abrazp grande.
Pedro

Bitcoin + Responsible Disclosure = Security

En castellano, mas abajo.

This page lists Bitcoin websites that incentivize responsible disclosure by offering a financial reward to researchers that disclose vulnerabilities to them. This is considered to be the best practice in the security industry and, given a reasonably high incentive and time, proves a reasonable degree of security.

Same in Spanish: Esta página contiene un listado de sitios web, relacionados con Bitcoin, que incentivan económicamente la revelación responsable de fallos de seguridad. Esto es considerado la norma en la industria de la seguridad informática y, dado suficiente tiempo y un incentivo razonable, garantiza un nivel aceptable de seguridad.

Company / Compañía
Reward noted / Recompenza
Coinbase $1000 min.
Vault of Satoshi $1000 (BTC)
QuickBT 1 BTC
Crowdcurity $1000 min. (BTC)
BitMe $1000 (BTC)
CoinDrawer No min. No max.
CoinKite 0.25 BTC min.

It is the authors’ intent to keep the table updated and useful. Please use the form below to get in touch with me.

Same in Spanish: Es mi intención mantener esta tabla al día, cualquier cosa me podés contactar usando el formulario de abajo.

Donations: 1Fayym77z2NTUotDkyyB6XqUmRNwbT7mDj

Changes to the table / Cambios:

Bitcoins y Mt. Gox.

Mt. Gox, una compañía japonesa que se dedicaba a intercambiar bitcoin por dólares, yenes y euros, se declaró en bancarrota hace un par de días.

Esto llevó a una tormenta de artículos declarando el fin de bitcoin por 5ta vez en su historia. “Bitcoin esta en quiebra”, “El presidente de la corporación detrás de bitcoin se robó todos los fondos”, declaran los diarios.

No es que la comunidad de bitcoin no haya pasado por esto antes: en la “burbuja” del 2011, cuando el precio llegó a precios impensables y luego pasó a valer mucho menos, o en la burbuja del 2013, donde cada bitcoin llegó a valer $1200 y luego llegó a $700.

Los precios suben y bajan hasta tal punto que la crítica dice que jamás sería posible que bitcoin sea un medio de intercambio de valores viable debido a su estabilidad. Si hoy compro una televisión, y luego la moneda que usé vale 10.000 veces mas, dicen, esto va a causar que la gente deje de consumir cosas.

Por otra parte, se han visto numerosos artículos en la prensa, que indican que desafortunadamente, el fin de bitcoin llegó. Por quinta vez, esto indica una grave carencia por parte de los medios a la hora de cultivar fuentes, y, mas importantemente, entender nociones básicas sobre bitcoin.

Intentar ver el futuro de bitcoin es, en mi opinión bastante dificil. Sin embargo, quisiera agregar dos párrafos a la conversación.

Respecto al valor de bitcoin como moneda de intercambio, sin llegar a hacer una analogía muy complicada, uno podría decir que de la misma manera nadie compraría jamás una computadora, pues no tiene sentido comprar una computadora hoy si mañana me podría comprar una computadora mucho mas potente y mucho mas pequeña.

Uno compra una computadora porque necesita leer su correo electrónico y jugar juegos. En mi opinión, uno va a gastar sus bitcoin porque tiene hambre y tiene que pagar el alquiler.

Quisiera agregar también, que bitcoin no es una compañía, ni tampoco una simple moneda especulativa. El protocolo de bitcoin es un avance criptográfico que permite resolver el problema de los dos generales, y tiene muchísimas aplicaciones mas allá de ser un medio de intercambio de valores que no puede ser interferido, inflado y desinflado artificialmente al beneficio de diversas entidades.

Aunque bitcoin fallase, aún no podemos imaginarnos las implicaciones que trae el protocolo, de la misma manera que no podíamos imaginarnos de que manera el Internet iba a impactar nuestra vida hace 20 años.

Compilado de enlaces

Hola a todos!

¿Cómo andan las cosas? Por acá todo bien, trabajando duro nomás.

Un abrazo!Pedro

Compilau de enlaces

Buenas,

Este es un compilau denlaces.

Bueno, ta
Un abrazo,
Pedro

Compilado de enlaces

AVISO:

El internet esta lleno de gatos, y llegué a la conclusión de que pase lo que pase, en este sitio web, bajo ninguna circunstancia, se van a publicar fotos de gatos.

Un abrazo,
Pedro

gato kitten

Compilado de enlaces

Este es el compilado de enlaces 95. Particularmente importante, representando el numero y siendo el compilado de enlaces numero uno despues del 94, y el compilado de enlaces anterior al 96.

UNNNNNNNNNNNNNNNNN abrazo,
Pedro