Protección contra la confusión de dependencias en PHP con Composer





Alex Birsan publicó recientemente un artículo "Confusión de dependencia: cómo pirateé Apple, Microsoft y docenas de otras empresas", en el que explicó cómo usaba administradores de paquetes a nivel de lenguaje como npm (Javascript), pip (Python) y gems ( Ruby) para obligar a las empresas a instalar y ejecutar código malicioso en su infraestructura.



El problema se reduce al hecho de que las empresas se refieren a los paquetes internos por su nombre, por ejemplo my-internal-package



, y un atacante publica un paquete con el mismo nombre en el registro / repositorio central de paquetes de idioma (para PHP es packagist.org ) my-internal-package



tener una versión superior. Luego, las empresas instalaron y ejecutaron estos paquetes maliciosos en lugar de sus paquetes internos porque su administrador de paquetes estaba eligiendo un número de versión más alto del repositorio de paquetes estándar en lugar del repositorio interno.



Hablando sobre la solución a este problema para Composer y Packagist en Twitter, Geordie resumió las diversas medidas que Composer y Packagist están utilizando para proteger a las empresas de este grave problema:



  1. Composer , , my-company/our-internal-pkg



    . packagist.org. Packagist.org . my-company/



    . packagist.org ( ), , my-company/dummy-pkg



    , , , . my-company/my-internal-package



    , «» packagist.org.
  2. Composer 2.0, . , , . packagist.org, . , , , Composer .
  3. Private Packagist , packagist.org, , , . Private Packagist Composer 1.x , Composer 2.
  4. Private Packagist packagist.org , Composer. , .
  5. Composer (lock file) URL . composer install, , . , , .
  6. Con Composer 2, puede excluir la carga de nombres de paquetes o patrones para cada repositorio. De modo que puede estar seguro de que incluso los paquetes mal escritos que no existen sin un prefijo registrado en packagist.org no podrán descargarse de packagist.org reemplazando la configuración predeterminada en composer.json. Este filtro de exclusión también se puede utilizar para repositorios de paquetes de terceros adicionales.




    "repositories": {
        "private-repo": {
            "url": "https://my-repo.internal"
        }
        "packagist.org": {
            "url": "https://repo.packagist.org",
            "exclude": ["myprefix/*"]
        }
    }
      
      





Los ataques en la cadena de suministro similares a los que describió Alex son una seria amenaza para las empresas y se han destacado en las noticias últimamente, por lo que es importante que su empresa comprenda los riesgos que enfrenta y tome medidas para mitigarlos.






Publicidad



¿Busca un VDS para depurar proyectos, un servidor para desarrollo y despliegue? Definitivamente eres nuestro cliente :) Facturación diaria de servidores, crea tu propia configuración en unos pocos clics, las licencias anti-DDoS y Windows ya están incluidas en el precio.






All Articles