Un estudio advierte que un commit de GitHub con marca "Verificado" no es único

Fuentes: New Research: A "Verified" GitHub Commit Is NOT Unique

Una investigación publicada como preprint por Jacob Ginesin, de la Universidad Carnegie Mellon, sostiene que un commit firmado en GitHub con la etiqueta "Verified" puede no ser único: un atacante sin acceso a la clave de firma puede generar un segundo commit distinto, con el mismo árbol, los mismos metadatos y una firma válida, cuyo único cambio respecto al original es el hash. El autor denomina a este fenómeno "hash chain malleability" porque, dado que cada commit nombra a su padre por hash, la alteración se propaga en cascada por toda la cadena.

El mecanismo no es una ruptura de la función hash, sino "signature malleability": un mismo commit lógico admite múltiples serializaciones firmadas, todas válidas pero con bytes diferentes y, por tanto, hashes distintos. El trabajo describe tres rutas que cubren todos los esquemas basados en GPG que GitHub verifica. En ECDSA, aprovecha la simetría algebraica que convierte una firma (r, s) en (r, n-s). En RSA y EdDSA, inserta un subpaquete bien formado en la región no cubierta por la firma de un paquete OpenPGP, algo permitido por el RFC 4880. En S/MIME, recodifica un campo de longitud del CMS en una forma no canónica que, aunque inválida en DER estricto, sí se acepta como BER.

El hallazgo se convierte en un riesgo de cadena de suministro por el comportamiento del servidor de GitHub: según el estudio, la plataforma no canonicaliza el contenedor de firma antes de verificarlo, por lo que acepta las tres variantes y asigna a cada commit un registro "Verified" durable indexado por el hash del commit. La propia documentación de GitHub confirma que el estado verificado se conserva aunque la clave se revoque o expire. El autor señala que la verificación local con `git verify-commit" es más estricta: acepta las dos rutas OpenPGP, pero rechaza la codificación S/MIME no canónica que, aun así, GitHub valida.