Git incorporó en su versión 2.24.0 (noviembre de 2019) el indicador --end-of-options como marcador para señalar el fin de las opciones en la posición reservada a las revisiones, ya que el tradicional -- quedó ocupado desde hace tiempo para separar revisiones de rutas (paths). Esa doble función de -- es la causa de una clase de vulnerabilidad conocida como inyección de argumentos (CWE-88), en la que un valor que comienza con guion, como un nombre de ref o la fracción de una URL, es interpretado por la herramienta como una opción en lugar de como dato.
El fallo afecta a programas que construyen un arreglo argv y delegan en subprocesos como git, Mercurial o ssh, sin pasar por un intérprete de comandos. Ejemplos documentados incluyen CVE-2017-1000117 en Git, CVE-2017-1000116 en Mercurial, CVE-2017-9800 en Subversion y CVE-2017-12836 en CVS, divulgados de forma coordinada en agosto de 2017 tras una demostración que aprovechó la opción -oProxyCommand= de ssh. Otro caso relevante es CVE-2019-13139 en docker build, originado por un fragmento #ref:dir en una URL de contexto de Git.
Los gestores de paquetes son especialmente vulnerables porque reciben URL y refs desde manifiestos, lockfiles y metadatos de dependencias. De diecinueve gestores analizados, diecisiete invocan el binario de git por defecto; solo Cargo (libgit2) y Poetry (dulwich) utilizan bibliotecas. La mayoría de las soluciones llegaron tras la publicación de CVE, como CVE-2021-43809 en Bundler, varios avisos en Composer o CVE-2022-36069 en Poetry. Go es el único que ha incorporado de forma sistemática --end-of-options, añadiéndolo en enero de 2026 como parte del parche para CVE-2025-68119, junto con la variable HGPLAIN=+strictflags de Mercurial.
