DevSecOps: principis de funcionament i comparació de SCA. Primera part

La importància de l'anàlisi de components de programari de tercers (Software Composition Analysis - SCA) en el procés de desenvolupament està creixent amb la publicació d'informes anuals sobre les vulnerabilitats de les biblioteques de codi obert, que són publicats per Synopsys, Sonatype, Snyk i White Source. . Segons l'informe L'estat de les vulnerabilitats de seguretat de codi obert 2020 el nombre de vulnerabilitats de codi obert identificades el 2019 va augmentar gairebé 1.5 vegades en comparació amb l'any anterior, mentre que els components de codi obert s'utilitzen entre el 60% i el 80% dels projectes. En una opinió independent, els processos SCA són una pràctica separada d'OWASP SAMM i BSIMM com a indicador de maduresa, i durant el primer semestre de 2020, OWASP va llançar el nou OWASP Software Component Verification Standard (SCVS), que proporciona les millors pràctiques per verificar tercers components del partit a la cadena de subministrament BY.

DevSecOps: principis de funcionament i comparació de SCA. Primera part

Un dels casos més il·lustratius succeït amb Equifax el maig de 2017. Els atacants desconeguts van obtenir informació sobre 143 milions de nord-americans, inclosos noms complets, adreces, números de la Seguretat Social i carnets de conduir. En 209 casos, els documents també incloïen informació sobre les targetes bancàries de les víctimes. Aquesta filtració es va produir com a resultat de l'explotació d'una vulnerabilitat crítica a Apache Struts 000 (CVE-2-2017), mentre que la correcció es va publicar el març de 5638. L'empresa va tenir dos mesos per instal·lar l'actualització, però ningú es va molestar amb ella.

Aquest article tractarà la qüestió de l'elecció d'una eina per a la realització de l'SCA des del punt de vista de la qualitat dels resultats de l'anàlisi. També es farà una comparació funcional de les eines. El procés d'integració en CI/CD i les capacitats d'integració es deixarà per a publicacions posteriors. OWASP va presentar una àmplia gamma d'eines al vostre lloc, però en la revisió actual només tocarem l'eina de codi obert més popular Dependency Check, la plataforma de codi obert una mica menys coneguda Dependency Track i la solució empresarial Sonatype Nexus IQ. També entendrem com funcionen aquestes solucions i compararem els resultats obtinguts per a falsos positius.

DevSecOps: principis de funcionament i comparació de SCA. Primera part

Com funciona?

Control de dependència és una utilitat (CLI, maven, mòdul jenkins, ant) ​​que analitza fitxers de projecte, recopila informació sobre dependències (nom del paquet, groupid, títol de l'especificació, versió...), crea una línia CPE (Common Platform Enumeration) , URL del paquet (PURL) i identifica vulnerabilitats per a CPE/PURL a partir de bases de dades (NVD, Sonatype OSS Index, NPM Audit API...), després del qual crea un informe únic en format HTML, JSON, XML...

Vegem com és el CPE:

cpe:2.3:part:vendor:product:version:update:edition:language:sw_edition:target_sw:target_hw:other

  • part: Indicació que el component es relaciona amb l'aplicació (a), el sistema operatiu (o), el maquinari (h) (obligatori)
  • Venedor: Nom del fabricant del producte (obligatori)
  • producte: Nom del producte (obligatori)
  • Versió: Versió del component (element obsolet)
  • Actualització: Actualització del paquet
  • edició: Versió heretada (element obsolet)
  • Idioma: Llenguatge definit a RFC-5646
  • Edició SW: Versió de programari
  • SW objectiu: Entorn de programari en el qual opera el producte
  • HW objectiu: L'entorn de maquinari en què opera el producte
  • altres: Informació del proveïdor o del producte

Un exemple de CPE és el següent:

cpe:2.3:a:pivotal_software:spring_framework:3.0.0:*:*:*:*:*:*:*

La línia significa que la versió 2.3 de CPE descriu el component de l'aplicació del fabricant pivotal_software amb el títol spring_framework versió 3.0.0. Si obrim una vulnerabilitat CVE-2014-0225 a NVD, podem veure una menció d'aquest CPE. El primer problema al qual hauríeu de prestar atenció immediatament és que CVE a NVD, segons CPE, informa d'un problema en el marc, i no en un component específic. És a dir, si els desenvolupadors estan estretament lligats al framework i la vulnerabilitat identificada no afecta aquells mòduls que utilitzen els desenvolupadors, un especialista en seguretat haurà de desmuntar aquest CVE d'una manera o altra i pensar en l'actualització.

L'URL també l'utilitzen les eines SCA. El format d'URL del paquet és el següent:

scheme:type/namespace/name@version?qualifiers#subpath

  • Esquema: Sempre hi haurà "pkg" que indica que es tracta d'un URL de paquet (obligatori)
  • tipus: El "tipus" del paquet o el "protocol" del paquet, com ara maven, npm, nuget, gem, pypi, etc. (Article obligatori)
  • Espai de noms: Alguns prefixos de nom, com ara un identificador de grup Maven, propietari d'una imatge Docker, usuari de GitHub o organització. Opcional i depèn del tipus.
  • Nom: Nom del paquet (obligatori)
  • Versió: Versió del paquet
  • Qualificadors: Dades addicionals de qualificació per al paquet, com ara SO, arquitectura, distribució, etc. Opcional i específic del tipus.
  • Subruta: Camí addicional al paquet en relació a l'arrel del paquet

Per exemple:

pkg:golang/google.golang.org/genproto#googleapis/api/annotations
pkg:maven/org.apache.commons/[email protected]
pkg:pypi/[email protected]

Pista de dependència — una plataforma web on-premise que accepta la llista de materials (BOM) ja feta generada CycloneDX и SPDX, és a dir, especificacions ja fetes sobre dependències existents. Aquest és un fitxer XML que descriu les dependències: nom, hash, URL del paquet, editor, llicència. A continuació, Dependency Track analitza la BOM, examina els CVE disponibles per a les dependències identificades de la base de dades de vulnerabilitats (NVD, Sonatype OSS Index...), després del qual crea gràfics, calcula mètriques, actualitzant regularment les dades sobre l'estat de vulnerabilitat dels components. .

Un exemple de com podria semblar una LDM en format XML:

<?xml version="1.0" encoding="UTF-8"?>
<bom xmlns="http://cyclonedx.org/schema/bom/1.2" serialNumber="urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79" version="1">
  <components>
    <component type="library">
      <publisher>Apache</publisher>
      <group>org.apache.tomcat</group>
      <name>tomcat-catalina</name>
      <version>9.0.14</version>
      <hashes>
        <hash alg="MD5">3942447fac867ae5cdb3229b658f4d48</hash>
        <hash alg="SHA-1">e6b1000b94e835ffd37f4c6dcbdad43f4b48a02a</hash>
        <hash alg="SHA-256">f498a8ff2dd007e29c2074f5e4b01a9a01775c3ff3aeaf6906ea503bc5791b7b</hash>
        <hash alg="SHA-512">e8f33e424f3f4ed6db76a482fde1a5298970e442c531729119e37991884bdffab4f9426b7ee11fccd074eeda0634d71697d6f88a460dce0ac8d627a29f7d1282</hash>
      </hashes>
      <licenses>
        <license>
          <id>Apache-2.0</id>
        </license>
      </licenses>
      <purl>pkg:maven/org.apache.tomcat/[email protected]</purl>
    </component>
      <!-- More components here -->
  </components>
</bom>

La BOM es pot utilitzar no només com a paràmetres d'entrada per al seguiment de dependències, sinó també per inventariar components de programari a la cadena de subministrament, per exemple, per proporcionar programari a un client. El 2014, fins i tot es va proposar una llei als Estats Units "Llei de transparència i gestió de la cadena de subministrament cibernètica de 2014", que deia que en comprar programari, qualsevol estat. La institució ha de sol·licitar una BOM per evitar l'ús de components vulnerables, però la llei encara no ha entrat en vigor.

Tornant a SCA, Dependency Track té integracions ja fetes amb plataformes de notificació com Slack, sistemes de gestió de vulnerabilitats com Kenna Security. També val la pena dir que Dependency Track, entre altres coses, identifica versions obsoletes dels paquets i proporciona informació sobre les llicències (a causa del suport SPDX).

Si parlem específicament de la qualitat de SCA, aleshores hi ha una diferència fonamental.

Dependency Track no accepta el projecte com a entrada, sinó la BOM. Això vol dir que si volem provar el projecte, primer hem de generar bom.xml, per exemple utilitzant CycloneDX. Per tant, Dependency Track depèn directament de CycloneDX. Al mateix temps, permet la personalització. Això és el que va escriure l'equip d'OZON Mòdul CycloneDX per muntar fitxers BOM per a projectes Golang per a una exploració posterior mitjançant Dependency Track.

Nexus IQ és una solució SCA comercial de Sonatype, que forma part de l'ecosistema Sonatype, que també inclou Nexus Repository Manager. Nexus IQ pot acceptar com a entrada tant arxius de guerra (per a projectes java) a través de la interfície web o API, com la BOM, si la vostra organització encara no ha canviat de CycloneDX a una solució nova. A diferència de les solucions de codi obert, IQ no només fa referència a CP/PURL al component identificat i a la vulnerabilitat corresponent a la base de dades, sinó que també té en compte la seva pròpia investigació, per exemple, el nom de la funció o classe vulnerable. Els mecanismes del coeficient intel·lectual es parlaran més endavant en l'anàlisi dels resultats.

Resumim algunes de les característiques funcionals i també considerem els idiomes compatibles per a l'anàlisi:

Idioma
Nexus IQ
Control de dependència
Pista de dependència

Java
+
+
+

C / C ++
+
+
-

C#
+
+
-

.Net
+
+
+

Erlang
-
-
+

JavaScript (NodeJS)
+
+
+

PHP
+
+
+

Pitó
+
+
+

Ruby
+
+
+

Perl
-
-
-

Scala
+
+
+

Objective C
+
+
-

Ràpid
+
+
-

R
+
-
-

Go
+
+
+

Funcionalitat

Funcionalitat
Nexus IQ
Control de dependència
Pista de dependència

La capacitat de garantir que els components utilitzats en el codi font es comproven per a la puresa amb llicència
+
-
+

Capacitat d'escanejar i analitzar les vulnerabilitats i la neteja de la llicència per a les imatges de Docker
+ Integració amb Clair
-
-

Capacitat de configurar polítiques de seguretat per utilitzar biblioteques de codi obert
+
-
-

Capacitat d'escanejar repositoris de codi obert per a components vulnerables
+ RubyGems, Maven, NPM, Nuget, Pypi, Conan, Bower, Conda, Go, p2, R, Yum, Helm, Docker, CocoaPods, Git LFS
-
+ Hex, RubyGems, Maven, NPM, Nuget, Pypi

Disponibilitat d'un grup de recerca especialitzat
+
-
-

Funcionament en llaç tancat
+
+
+

Ús de bases de dades de tercers
+ Base de dades Sonatype tancada
+ Sonatype OSS, NPM Public Advisors
+ Sonatype OSS, NPM Public Advisors, RetireJS, VulnDB, suport per a la seva pròpia base de dades de vulnerabilitats

Possibilitat de filtrar components de codi obert quan s'intenta carregar al bucle de desenvolupament segons les polítiques configurades
+
-
-

Recomanacions per solucionar vulnerabilitats, disponibilitat d'enllaços a solucions
+
+- (depèn de la descripció a les bases de dades públiques)
+- (depèn de la descripció a les bases de dades públiques)

Classificació de vulnerabilitats detectades per gravetat
+
+
+

Model d'accés basat en rols
+
-
+

Suport CLI
+
+
+- (només per a CycloneDX)

Mostreig/ordenació de vulnerabilitats segons criteris definits
+
-
+

Tauler per estat de l'aplicació
+
-
+

Generació d'informes en format PDF
+
-
-

Generació d'informes en format JSONCSV
+
+
-

Suport a la llengua russa
-
-
-

Capacitats d'integració

Integració
Nexus IQ
Control de dependència
Pista de dependència

Integració LDAP/Active Directory
+
-
+

Integració amb el sistema d'integració contínua Bamboo
+
-
-

Integració amb el sistema d'integració contínua TeamCity
+
-
-

Integració amb el sistema d'integració contínua GitLab
+
+- (com a connector per a GitLab)
+

Integració amb el sistema d'integració contínua Jenkins
+
+
+

Disponibilitat de connectors per a IDE
+ IntelliJ, Eclipse, Visual Studio
-
-

Suport per a la integració personalitzada mitjançant serveis web (API) de l'eina
+
-
+

Control de dependència

Primer inici

Executem la comprovació de dependència en una aplicació deliberadament vulnerable DVJA.

Per a això farem servir Comprovació de dependència del connector Maven:

mvn org.owasp:dependency-check-maven:check

Com a resultat, dependència-check-report.html apareixerà al directori de destinació.

DevSecOps: principis de funcionament i comparació de SCA. Primera part

Obrim el fitxer. Després d'informació resumida sobre el nombre total de vulnerabilitats, podem veure informació sobre vulnerabilitats amb un alt nivell de gravetat i confiança, indicant el paquet, el CPE i el nombre de CVE.

A continuació ve la informació més detallada, en particular la base sobre la qual es va prendre la decisió (evidència), és a dir, una determinada BOM.

DevSecOps: principis de funcionament i comparació de SCA. Primera part

A continuació ve la descripció de CPE, PURL i CVE. Per cert, les recomanacions de correcció no s'inclouen a causa de la seva absència a la base de dades NVD.

DevSecOps: principis de funcionament i comparació de SCA. Primera part

Per veure sistemàticament els resultats de l'escaneig, podeu configurar Nginx amb una configuració mínima o enviar els defectes resultants a un sistema de gestió de defectes que admeti connectors per a la comprovació de dependències. Per exemple, Defect Dojo.

Pista de dependència

Instal · lació

Dependency Track, al seu torn, és una plataforma basada en web amb gràfics de visualització, de manera que el problema urgent d'emmagatzemar els defectes en una solució de tercers no sorgeix aquí.
Els scripts admesos per a la instal·lació són: Docker, WAR, Executable WAR.

Primer inici

Anem a l'URL del servei en execució. Iniciem sessió a través d'administrador/administrador, canviem l'inici de sessió i la contrasenya i després arribem al tauler. El següent que farem és crear un projecte per a una aplicació de prova en Java Inici/Projectes → Crea un projecte . Prenguem el DVJA com a exemple.

DevSecOps: principis de funcionament i comparació de SCA. Primera part

Com que el seguiment de dependències només pot acceptar BOM com a entrada, s'ha de recuperar aquesta BOM. Aprofitem-ho Connector CycloneDX Maven:

mvn org.cyclonedx:cyclonedx-maven-plugin:makeAggregateBom

Obtenim bom.xml i carreguem el fitxer al projecte creat DVJA → Dependències → Carrega BOM.

Anem a Administració → Analitzadors. Entenem que només tenim l'Analitzador intern habilitat, que inclou NVD. Connectem també Sonatype OSS Index.

DevSecOps: principis de funcionament i comparació de SCA. Primera part

Així, obtenim la següent imatge del nostre projecte:

DevSecOps: principis de funcionament i comparació de SCA. Primera part

També a la llista podeu trobar una vulnerabilitat aplicable a Sonatype OSS:

DevSecOps: principis de funcionament i comparació de SCA. Primera part

La principal decepció va ser que Dependency Track ja no accepta informes XML de Dependency Check. Les últimes versions compatibles de la integració de comprovació de dependències eren 1.0.0 - 4.0.2, mentre que vaig provar la 5.3.2.

aquí està vídeo (i aquí) quan encara era possible.

Nexus IQ

Primer inici

La instal·lació de Nexus IQ prové dels arxius de documentació, però hem creat una imatge de Docker per a aquests propòsits.

Després d'iniciar sessió a la consola, heu de crear una organització i una aplicació.

DevSecOps: principis de funcionament i comparació de SCA. Primera part

DevSecOps: principis de funcionament i comparació de SCA. Primera part

DevSecOps: principis de funcionament i comparació de SCA. Primera part

Com podeu veure, la configuració en el cas d'IQ és una mica més complicada, perquè també hem de crear polítiques que siguin aplicables per a diferents "etapes" (dev, build, stage, release). Això és necessari per bloquejar els components vulnerables a mesura que es mouen pel canal més a prop de la producció o bloquejar-los tan bon punt entren al Repositori de Nexus quan els descarreguen els desenvolupadors.

Per notar la diferència entre el codi obert i l'empresa, realitzem la mateixa exploració a través de Nexus IQ de la mateixa manera Complement Maven, havent creat prèviament una aplicació de prova a la interfície NexusIQ dvja-test-and-compare:

mvn com.sonatype.clm:clm-maven-plugin:evaluate -Dclm.applicationId=dvja-test-and-compare -Dclm.serverUrl=<NEXUSIQIP> -Dclm.username=<USERNAME> -Dclm.password=<PASSWORD>

Seguiu l'URL de l'informe generat a la interfície web d'IQ:

DevSecOps: principis de funcionament i comparació de SCA. Primera part

Aquí podeu veure totes les infraccions de les polítiques que indiquen diferents nivells d'importància (des d'Informació fins a Crítics de seguretat). La lletra D al costat del component significa que el component és Dependència directa, i la lletra T al costat del component significa que el component és Dependència Transitiva, és a dir, és transitiu.

Per cert, l'informe Informe sobre l'estat de la seguretat de codi obert 2020 de Snyk informa que més del 70% de les vulnerabilitats de codi obert descobertes a Node.js, Java i Ruby es troben en dependències transitives.

Si obrim una de les infraccions de la política de Nexus IQ, podem veure una descripció del component, així com un gràfic de versions, que mostra la ubicació de la versió actual al gràfic de temps, així com en quin moment deixa de ser la vulnerabilitat. ser vulnerable. L'alçada de les espelmes al gràfic mostra la popularitat d'utilitzar aquest component.

DevSecOps: principis de funcionament i comparació de SCA. Primera part

Si aneu a la secció de vulnerabilitats i amplieu el CVE, podeu llegir una descripció d'aquesta vulnerabilitat, recomanacions per a l'eliminació, així com el motiu pel qual es va violar aquest component, és a dir, la presència de la classe. DiskFileitem.class.

DevSecOps: principis de funcionament i comparació de SCA. Primera part

DevSecOps: principis de funcionament i comparació de SCA. Primera part

Resumim només els relacionats amb components Java de tercers, eliminant els components js. Entre parèntesis indiquem el nombre de vulnerabilitats que es van trobar fora de NVD.

Total Nexus IQ:

  • Dependències escanejades: 62
  • Dependències vulnerables: 16
  • Vulnerabilitats trobades: 42 (8 sonatype db)

Comprovació de dependència total:

  • Dependències escanejades: 47
  • Dependències vulnerables: 13
  • Vulnerabilitats trobades: 91 (14 sonatype oss)

Seguiment de dependència total:

  • Dependències escanejades: 59
  • Dependències vulnerables: 10
  • Vulnerabilitats trobades: 51 (1 sonatype oss)

En els propers passos, analitzarem els resultats obtinguts i esbrinarem quina d'aquestes vulnerabilitats és un defecte real i quina és un fals positiu.

Exempció de responsabilitat

Aquesta ressenya no és una veritat indiscutible. L'autor no tenia com a objectiu ressaltar un instrument separat amb el rerefons dels altres. L'objectiu de la revisió era mostrar els mecanismes de funcionament de les eines SCA i les maneres de comprovar-ne els resultats.

Comparació de resultats

Condicions:

Un fals positiu per a vulnerabilitats de components de tercers és:

  • Desajust CVE amb el component identificat
  • Per exemple, si s'identifica una vulnerabilitat al marc struts2 i l'eina apunta a un component del marc struts-tiles, al qual aquesta vulnerabilitat no s'aplica, aquest és un fals positiu.
  • CVE no coincideix amb la versió identificada del component
  • Per exemple, la vulnerabilitat està lligada a la versió de Python > 3.5 i l'eina marca la versió 2.7 com a vulnerable; això és un fals positiu, ja que de fet la vulnerabilitat només s'aplica a la branca del producte 3.x.
  • CVE duplicat
  • Per exemple, si l'SCA especifica un CVE que habilita un RCE, llavors l'SCA especifica un CVE per al mateix component que s'aplica als productes de Cisco afectats per aquest RCE. En aquest cas serà fals positiu.
  • Per exemple, es va trobar un CVE en un component spring-web, després del qual SCA apunta al mateix CVE en altres components del Spring Framework, mentre que el CVE no té res a veure amb altres components. En aquest cas serà fals positiu.

L'objecte de l'estudi va ser el projecte de codi obert DVJA. L'estudi va incloure només components java (sense js).

Resum de resultats

Anem directament als resultats d'una revisió manual de les vulnerabilitats identificades. L'informe complet de cada CVE es pot trobar a l'Annex.

Resultats resums per a totes les vulnerabilitats:

Paràmetre
Nexus IQ
Control de dependència
Pista de dependència

Total de vulnerabilitats identificades
42
91
51

Vulnerabilitats identificades incorrectament (fals positiu)
2 (4.76%)
62 (68,13%)
29 (56.86%)

No s'han trobat vulnerabilitats rellevants (fals negatiu)
10
20
27

Resum de resultats per component:

Paràmetre
Nexus IQ
Control de dependència
Pista de dependència

Components totals identificats
62
47
59

Total components vulnerables
16
13
10

Components vulnerables identificats incorrectament (fals positiu)
1
5
0

Components vulnerables identificats incorrectament (fals positiu)
0
6
6

Construïm gràfics visuals per avaluar la proporció de falsos positius i falsos negatius amb el nombre total de vulnerabilitats. Els components es marquen horitzontalment i les vulnerabilitats identificades en ells es marquen verticalment.

DevSecOps: principis de funcionament i comparació de SCA. Primera part

DevSecOps: principis de funcionament i comparació de SCA. Primera part

DevSecOps: principis de funcionament i comparació de SCA. Primera part

Per a una comparació, l'equip de Sonatype va realitzar un estudi similar provant un projecte de 1531 components mitjançant OWASP Dependency Check. Com podem veure, la relació entre el soroll i les respostes correctes és comparable als nostres resultats.

DevSecOps: principis de funcionament i comparació de SCA. Primera part
Font: www.sonatype.com/why-precision-matters-ebook

Vegem alguns CVE dels nostres resultats d'escaneig per entendre el motiu d'aquests resultats.

més

№ 1

Vegem primer alguns punts interessants sobre el Sonatype Nexus IQ.

Nexus IQ assenyala un problema amb la deserialització amb la capacitat de realitzar RCE al Spring Framework diverses vegades. CVE-2016-1000027 a spring-web:3.0.5 per primera vegada i CVE-2011-2894 a spring-context:3.0.5 i spring-core:3.0.5. Al principi, sembla que hi ha una duplicació de la vulnerabilitat en diversos CVE. Perquè, si mireu CVE-2016-1000027 i CVE-2011-2894 a la base de dades NVD, sembla que tot és evident.

Component
Vulnerabilitat

primavera-web: 3.0.5
CVE-2016-1000027

primavera-context: 3.0.5
CVE-2011-2894

nucli de molla: 3.0.5
CVE-2011-2894

Descripció CVE-2011-2894 de NVD:
DevSecOps: principis de funcionament i comparació de SCA. Primera part

Descripció CVE-2016-1000027 de NVD:
DevSecOps: principis de funcionament i comparació de SCA. Primera part

CVE-2011-2894 és bastant famós. A l'informe White Source 2011 aquest CVE va ser reconegut com un dels més comuns. Les descripcions de CVE-2016-100027, en principi, són poques a NVD, i sembla que només s'aplica a Spring Framework 4.1.4. Fem-hi un cop d'ull referència i aquí tot queda més o menys clar. Des de Articles sostenibles Entenem que a més de la vulnerabilitat a RemoteInvocationSerializingExporter a CVE-2011-2894, la vulnerabilitat s'observa a HttpInvokerServiceExporter. Això és el que ens diu Nexus IQ:

DevSecOps: principis de funcionament i comparació de SCA. Primera part

Tanmateix, no hi ha res semblant a això a NVD, i és per això que Dependency Check i Dependency Track reben un fals negatiu.

També a partir de la descripció de CVE-2011-2894 es pot entendre que la vulnerabilitat està efectivament present tant a spring-context:3.0.5 com a spring-core:3.0.5. La confirmació d'això es pot trobar en un article de la persona que va trobar aquesta vulnerabilitat.

№ 2

Component
Vulnerabilitat
Resultat

puntals de 2 nuclis: 2.3.30
CVE-2016-4003
FALS

Si estudiem la vulnerabilitat CVE-2016-4003, entendrem que es va solucionar a la versió 2.3.28, però, Nexus IQ ens ho informa. Hi ha una nota a la descripció de la vulnerabilitat:

DevSecOps: principis de funcionament i comparació de SCA. Primera part

És a dir, la vulnerabilitat només existeix juntament amb una versió obsoleta del JRE, de la qual van decidir advertir-nos. No obstant això, considerem aquest Fals Positiu, encara que no el pitjor.

# 3

Component
Vulnerabilitat
Resultat

xwork-core: 2.3.30
CVE-2017-9804
VERITABLE

xwork-core: 2.3.30
CVE-2017-7672
FALS

Si mirem les descripcions de CVE-2017-9804 i CVE-2017-7672, entendrem que el problema és URLValidator class, amb CVE-2017-9804 derivat de CVE-2017-7672. La presència de la segona vulnerabilitat no comporta cap càrrega útil que no sigui el fet que la seva gravetat ha augmentat fins a Alt, per la qual cosa podem considerar que és un soroll innecessari.

En general, no es van trobar altres falsos positius per a Nexus IQ.

№ 4

Hi ha diverses coses que fan que IQ es distingeixi d'altres solucions.

Component
Vulnerabilitat
Resultat

primavera-web: 3.0.5
CVE-2020-5398
VERITABLE

El CVE de l'NVD indica que només s'aplica a les versions 5.2.x anteriors a 5.2.3, 5.1.x anteriors a 5.1.13 i versions 5.0.x anteriors a 5.0.16, però, si mirem la descripció de CVE a Nexus IQ , llavors veurem el següent:
Avís de desviació d'assessorament: l'equip d'investigació de seguretat de Sonatype va descobrir que aquesta vulnerabilitat es va introduir a la versió 3.0.2.RELEASE i no a la 5.0.x tal com s'indica a l'avís.

A continuació hi ha un PoC per a aquesta vulnerabilitat, que indica que està present a la versió 3.0.5.

El fals negatiu s'envia a la comprovació de dependències i al seguiment de dependències.

№ 5

Vegem els falsos positius per a la comprovació de dependència i el seguiment de dependències.

Dependency Check destaca perquè reflecteix aquells CVE que s'apliquen a tot el marc de NVD a aquells components als quals no s'apliquen aquests CVE. Això es refereix a CVE-2012-0394, CVE-2013-2115, CVE-2014-0114, CVE-2015-0899, CVE-2015-2992, CVE-2016-1181, CVE-2016-1182, que depèn ” a struts-taglib:1.3.8 i struts-tiles-1.3.8. Aquests components no tenen res a veure amb el que es descriu al CVE: processament de sol·licituds, validació de pàgines, etc. Això es deu al fet que el que tenen en comú aquests CVE i components és només el framework, per això Dependency Check ho va considerar una vulnerabilitat.

La mateixa situació passa amb spring-tx:3.0.5, i una situació similar amb struts-core:1.3.8. Per a struts-core, Dependency Check i Dependency Track han trobat moltes vulnerabilitats que són realment aplicables a struts2-core, que és essencialment un marc separat. En aquest cas, Nexus IQ va entendre correctament la imatge i en els CVE que va emetre, indicava que struts-core havia arribat al final de la vida útil i calia passar a struts2-core.

№ 6

En algunes situacions, és injust interpretar un error evident de comprovació de dependència i seguiment de dependència. En particular CVE-2013-4152, CVE-2013-6429, CVE-2013-6430, CVE-2013-7315, CVE-2014-0054, CVE-2014-0225, CVE-2014-0225, comprovació de seguiment de dependència i quina dependència atribuït a spring-core:3.0.5 en realitat pertany a spring-web:3.0.5. Al mateix temps, alguns d'aquests CVE també van ser trobats per Nexus IQ, però, IQ els va identificar correctament amb un altre component. Com que aquestes vulnerabilitats no es van trobar a spring-core, no es pot argumentar que no es troben en el marc en principi i les eines de codi obert van assenyalar correctament aquestes vulnerabilitats (s'han perdut una mica).

Troballes

Com podem veure, la determinació de la fiabilitat de les vulnerabilitats identificades mitjançant una revisió manual no dóna resultats inequívocs, motiu pel qual sorgeixen qüestions controvertides. Els resultats són que la solució Nexus IQ té la taxa de falsos positius més baixa i la precisió més alta.

En primer lloc, això es deu al fet que l'equip de Sonatype va ampliar la descripció de cada vulnerabilitat CVE de NVD a les seves bases de dades, indicant les vulnerabilitats d'una versió concreta dels components fins a la classe o funció, realitzant investigacions addicionals (per exemple , comprovant les vulnerabilitats en versions de programari anteriors).

També tenen una influència important en els resultats aquelles vulnerabilitats que no estaven incloses a NVD, però que tanmateix estan presents a la base de dades Sonatype amb la marca SONATYPE. Segons l'informe L'estat de les vulnerabilitats de seguretat de codi obert 2020 El 45% de les vulnerabilitats de codi obert descobertes no s'informa a NVD. Segons la base de dades de WhiteSource, només el 29% de totes les vulnerabilitats de codi obert informades fora de NVD acaben allà publicades, per això és important buscar també vulnerabilitats en altres fonts.

Com a resultat, la comprovació de dependència produeix molt de soroll, mancant alguns components vulnerables. Dependency Track produeix menys soroll i detecta un gran nombre de components, cosa que no fa mal visualment als ulls a la interfície web.

Tanmateix, la pràctica demostra que el codi obert hauria de convertir-se en els primers passos cap a DevSecOps madurs. El primer que hauríeu de pensar quan integreu SCA al desenvolupament són els processos, és a dir, pensar juntament amb la direcció i els departaments relacionats sobre com haurien de ser els processos ideals a la vostra organització. Pot resultar que per a la vostra organització, al principi, Dependency Check o Dependency Track cobrirà totes les necessitats empresarials, i les solucions empresarials seran una continuació lògica a causa de la creixent complexitat de les aplicacions que s'estan desenvolupant.

Apèndix A: Resultats dels components
Símbols:

  • Alta: vulnerabilitats de nivell alt i crític en el component
  • Mitjà — Vulnerabilitats de nivell de criticitat mitjà en el component
  • TRUE — Veritable problema positiu
  • FALSE: problema fals positiu

Component
Nexus IQ
Control de dependència
Pista de dependència
Resultat

dom4j: 1.6.1
alt
alt
alt
VERITABLE

log4j-core: 2.3
alt
alt
alt
VERITABLE

log4j: 1.2.14
alt
alt
-
VERITABLE

col·leccions comuns:3.1
alt
alt
alt
VERITABLE

càrrega de fitxers comuns: 1.3.2
alt
alt
alt
VERITABLE

commons-beanutils:1.7.0
alt
alt
alt
VERITABLE

commons-codec: 1:10
mitjà
-
-
VERITABLE

mysql-connector-java:5.1.42
alt
alt
alt
VERITABLE

Spring-expression: 3.0.5
alt
component no trobat

VERITABLE

primavera-web: 3.0.5
alt
component no trobat
alt
VERITABLE

primavera-context: 3.0.5
mitjà
component no trobat
-
VERITABLE

nucli de molla: 3.0.5
mitjà
alt
alt
VERITABLE

struts2-config-browser-plugin:2.3.30
mitjà
-
-
VERITABLE

spring-tx:3.0.5
-
alt
-
FALS

nucli de puntals: 1.3.8
alt
alt
alt
VERITABLE

xwork-core: 2.3.30
alt
-
-
VERITABLE

struts2-core: 2.3.30
alt
alt
alt
VERITABLE

struts-taglib:1.3.8
-
alt
-
FALS

puntals-rajoles-1.3.8
-
alt
-
FALS

Apèndix B: Resultats de vulnerabilitat
Símbols:

  • Alta: vulnerabilitats de nivell alt i crític en el component
  • Mitjà — Vulnerabilitats de nivell de criticitat mitjà en el component
  • TRUE — Veritable problema positiu
  • FALSE: problema fals positiu

Component
Nexus IQ
Control de dependència
Pista de dependència
Gravetat
Resultat
Comentari

dom4j: 1.6.1
CVE-2018-1000632
CVE-2018-1000632
CVE-2018-1000632
alt
VERITABLE

CVE-2020-10683
CVE-2020-10683
CVE-2020-10683
alt
VERITABLE

log4j-core: 2.3
CVE-2017-5645
CVE-2017-5645
CVE-2017-5645
alt
VERITABLE

CVE-2020-9488
CVE-2020-9488
CVE-2020-9488
Sota
VERITABLE

log4j: 1.2.14
CVE-2019-17571
CVE-2019-17571
-
alt
VERITABLE

-
CVE-2020-9488
-
Sota
VERITABLE

SONATYPE-2010-0053
-
-
alt
VERITABLE

col·leccions comuns:3.1
-
CVE-2015-6420
CVE-2015-6420
alt
FALS
Duplicats RCE(OSSINDEX)

-
CVE-2017-15708
CVE-2017-15708
alt
FALS
Duplicats RCE(OSSINDEX)

SONATYPE-2015-0002
RCE (OSSINDEX)
RCE(OSSINDEX)
alt
VERITABLE

càrrega de fitxers comuns: 1.3.2
CVE-2016-1000031
CVE-2016-1000031
CVE-2016-1000031
alt
VERITABLE

SONATYPE-2014-0173
-
-
mitjà
VERITABLE

commons-beanutils:1.7.0
CVE-2014-0114
CVE-2014-0114
CVE-2014-0114
alt
VERITABLE

-
CVE-2019-10086
CVE-2019-10086
alt
FALS
La vulnerabilitat només s'aplica a les versions 1.9.2+

commons-codec: 1:10
SONATYPE-2012-0050
-
-
mitjà
VERITABLE

mysql-connector-java:5.1.42
CVE-2018-3258
CVE-2018-3258
CVE-2018-3258
alt
VERITABLE

CVE-2019-2692
CVE-2019-2692
-
mitjà
VERITABLE

-
CVE-2020-2875
-
mitjà
FALS
La mateixa vulnerabilitat que CVE-2019-2692, però amb la nota "els atacs poden afectar significativament productes addicionals"

-
CVE-2017-15945
-
alt
FALS
No és rellevant per a mysql-connector-java

-
CVE-2020-2933
-
Sota
FALS
Duplicat de CVE-2020-2934

CVE-2020-2934
CVE-2020-2934
-
mitjà
VERITABLE

Spring-expression: 3.0.5
CVE-2018-1270
component no trobat
-
alt
VERITABLE

CVE-2018-1257
-
-
mitjà
VERITABLE

primavera-web: 3.0.5
CVE-2016-1000027
component no trobat
-
alt
VERITABLE

CVE-2014-0225
-
CVE-2014-0225
alt
VERITABLE

CVE-2011-2730
-
-
alt
VERITABLE

-
-
CVE-2013-4152
mitjà
VERITABLE

CVE-2018-1272
-
-
alt
VERITABLE

CVE-2020-5398
-
-
alt
VERITABLE
Un exemple il·lustratiu a favor d'IQ: "L'equip d'investigació de seguretat de Sonatype va descobrir que aquesta vulnerabilitat es va introduir a la versió 3.0.2.RELEASE i no a la 5.0.x com s'indica a l'avís".

CVE-2013-6429
-
-
mitjà
VERITABLE

CVE-2014-0054
-
CVE-2014-0054
mitjà
VERITABLE

CVE-2013-6430
-
-
mitjà
VERITABLE

primavera-context: 3.0.5
CVE-2011-2894
component no trobat
-
mitjà
VERITABLE

nucli de molla: 3.0.5
-
CVE-2011-2730
CVE-2011-2730
alt
VERITABLE

CVE-2011-2894
CVE-2011-2894
CVE-2011-2894
mitjà
VERITABLE

-
-
CVE-2013-4152
mitjà
FALS
Duplicat de la mateixa vulnerabilitat a spring-web

-
CVE-2013-4152
-
mitjà
FALS
La vulnerabilitat es relaciona amb el component spring-web

-
CVE-2013-6429
CVE-2013-6429
mitjà
FALS
La vulnerabilitat es relaciona amb el component spring-web

-
CVE-2013-6430
-
mitjà
FALS
La vulnerabilitat es relaciona amb el component spring-web

-
CVE-2013-7315
CVE-2013-7315
mitjà
FALS
SPLIT de CVE-2013-4152. + La vulnerabilitat es relaciona amb el component spring-web

-
CVE-2014-0054
CVE-2014-0054
mitjà
FALS
La vulnerabilitat es relaciona amb el component spring-web

-
CVE-2014-0225
-
alt
FALS
La vulnerabilitat es relaciona amb el component spring-web

-
-
CVE-2014-0225
alt
FALS
Duplicat de la mateixa vulnerabilitat a spring-web

-
CVE-2014-1904
CVE-2014-1904
mitjà
FALS
La vulnerabilitat es relaciona amb el component spring-web-mvc

-
CVE-2014-3625
CVE-2014-3625
mitjà
FALS
La vulnerabilitat es relaciona amb el component spring-web-mvc

-
CVE-2016-9878
CVE-2016-9878
alt
FALS
La vulnerabilitat es relaciona amb el component spring-web-mvc

-
CVE-2018-1270
CVE-2018-1270
alt
FALS
Per a missatges d'expressió primavera/primavera

-
CVE-2018-1271
CVE-2018-1271
mitjà
FALS
La vulnerabilitat es relaciona amb el component spring-web-mvc

-
CVE-2018-1272
CVE-2018-1272
alt
VERITABLE

CVE-2014-3578
CVE-2014-3578 (OSSINDEX)
CVE-2014-3578
mitjà
VERITABLE

SONATYPE-2015-0327
-
-
Sota
VERITABLE

struts2-config-browser-plugin:2.3.30
SONATYPE-2016-0104
-
-
mitjà
VERITABLE

spring-tx:3.0.5
-
CVE-2011-2730
-
alt
FALS
La vulnerabilitat no és específica de spring-tx

-
CVE-2011-2894
-
alt
FALS
La vulnerabilitat no és específica de spring-tx

-
CVE-2013-4152
-
mitjà
FALS
La vulnerabilitat no és específica de spring-tx

-
CVE-2013-6429
-
mitjà
FALS
La vulnerabilitat no és específica de spring-tx

-
CVE-2013-6430
-
mitjà
FALS
La vulnerabilitat no és específica de spring-tx

-
CVE-2013-7315
-
mitjà
FALS
La vulnerabilitat no és específica de spring-tx

-
CVE-2014-0054
-
mitjà
FALS
La vulnerabilitat no és específica de spring-tx

-
CVE-2014-0225
-
alt
FALS
La vulnerabilitat no és específica de spring-tx

-
CVE-2014-1904
-
mitjà
FALS
La vulnerabilitat no és específica de spring-tx

-
CVE-2014-3625
-
mitjà
FALS
La vulnerabilitat no és específica de spring-tx

-
CVE-2016-9878
-
alt
FALS
La vulnerabilitat no és específica de spring-tx

-
CVE-2018-1270
-
alt
FALS
La vulnerabilitat no és específica de spring-tx

-
CVE-2018-1271
-
mitjà
FALS
La vulnerabilitat no és específica de spring-tx

-
CVE-2018-1272
-
mitjà
FALS
La vulnerabilitat no és específica de spring-tx

nucli de puntals: 1.3.8
-
CVE-2011-5057 (OSSINDEX)

mitjà
FASLE
Vulnerabilitat a Struts 2

-
CVE-2012-0391 (OSSINDEX)
CVE-2012-0391
alt
FALS
Vulnerabilitat a Struts 2

-
CVE-2014-0094 (OSSINDEX)
CVE-2014-0094
mitjà
FALS
Vulnerabilitat a Struts 2

-
CVE-2014-0113 (OSSINDEX)
CVE-2014-0113
alt
FALS
Vulnerabilitat a Struts 2

CVE-2016-1182
3VE-2016-1182
-
alt
VERITABLE

-
-
CVE-2011-5057
mitjà
FALS
Vulnerabilitat a Struts 2

-
CVE-2012-0392 (OSSINDEX)
CVE-2012-0392
alt
FALS
Vulnerabilitat a Struts 2

-
CVE-2012-0393 (OSSINDEX)
CVE-2012-0393
mitjà
FALS
Vulnerabilitat a Struts 2

CVE-2015-0899
CVE-2015-0899
-
alt
VERITABLE

-
CVE-2012-0394
CVE-2012-0394
mitjà
FALS
Vulnerabilitat a Struts 2

-
CVE-2012-0838 (OSSINDEX)
CVE-2012-0838
alt
FALS
Vulnerabilitat a Struts 2

-
CVE-2013-1965 (OSSINDEX)
CVE-2013-1965
alt
FALS
Vulnerabilitat a Struts 2

-
CVE-2013-1966 (OSSINDEX)
CVE-2013-1966
alt
FASLE
Vulnerabilitat a Struts 2

-
CVE-2013-2115
CVE-2013-2115
alt
FASLE
Vulnerabilitat a Struts 2

-
CVE-2013-2134 (OSSINDEX)
CVE-2013-2134
alt
FASLE
Vulnerabilitat a Struts 2

-
CVE-2013-2135 (OSSINDEX)
CVE-2013-2135
alt
FASLE
Vulnerabilitat a Struts 2

CVE-2014-0114
CVE-2014-0114
-
alt
VERITABLE

-
CVE-2015-2992
CVE-2015-2992
mitjà
FALS
Vulnerabilitat a Struts 2

-
CVE-2016-0785 (OSSINDEX)
CVE-2016-0785
alt
FALS
Vulnerabilitat a Struts 2

CVE-2016-1181
CVE-2016-1181
-
alt
VERITABLE

-
CVE-2016-4003 (OSSINDEX)
CVE-2016-4003
alt
FALS
Vulnerabilitat a Struts 2

xwork-core: 2.3.30
CVE-2017-9804
-
-
alt
VERITABLE

SONATYPE-2017-0173
-
-
alt
VERITABLE

CVE-2017-7672
-
-
alt
FALS
Duplicat de CVE-2017-9804

SONATYPE-2016-0127
-
-
alt
VERITABLE

puntals de 2 nuclis: 2.3.30
-
CVE-2016-6795
CVE-2016-6795
alt
VERITABLE

-
CVE-2017-9787
CVE-2017-9787
alt
VERITABLE

-
CVE-2017-9791
CVE-2017-9791
alt
VERITABLE

-
CVE-2017-9793
-
alt
FALS
Duplicat de CVE-2018-1327

-
CVE-2017-9804
-
alt
VERITABLE

-
CVE-2017-9805
CVE-2017-9805
alt
VERITABLE

CVE-2016-4003
-
-
mitjà
FALS
Aplicable a Apache Struts 2.x fins a 2.3.28, que és la versió 2.3.30. Tanmateix, segons la descripció, el CVE és vàlid per a qualsevol versió de Struts 2 si s'utilitza JRE 1.7 o inferior. Pel que sembla, van decidir reassegurar-nos aquí, però sembla més aviat FALS

-
CVE-2018-1327
CVE-2018-1327
alt
VERITABLE

CVE-2017-5638
CVE-2017-5638
CVE-2017-5638
alt
VERITABLE
La mateixa vulnerabilitat que els pirates informàtics d'Equifax van explotar el 2017

CVE-2017-12611
CVE-2017-12611
-
alt
VERITABLE

CVE-2018-11776
CVE-2018-11776
CVE-2018-11776
alt
VERITABLE

struts-taglib:1.3.8
-
CVE-2012-0394
-
mitjà
FALS
Per a puntals de 2 nuclis

-
CVE-2013-2115
-
alt
FALS
Per a puntals de 2 nuclis

-
CVE-2014-0114
-
alt
FALS
Per a commons-beanutils

-
CVE-2015-0899
-
alt
FALS
No s'aplica a taglib

-
CVE-2015-2992
-
mitjà
FALS
Es refereix a struts2-core

-
CVE-2016-1181
-
alt
FALS
No s'aplica a taglib

-
CVE-2016-1182
-
alt
FALS
No s'aplica a taglib

puntals-rajoles-1.3.8
-
CVE-2012-0394
-
mitjà
FALS
Per a puntals de 2 nuclis

-
CVE-2013-2115
-
alt
FALS
Per a puntals de 2 nuclis

-
CVE-2014-0114
-
alt
FALS
Sota commons-beanutils

-
CVE-2015-0899
-
alt
FALS
No s'aplica a rajoles

-
CVE-2015-2992
-
mitjà
FALS
Per a puntals de 2 nuclis

-
CVE-2016-1181
-
alt
FALS
No s'aplica a taglib

-
CVE-2016-1182
-
alt
FALS
No s'aplica a taglib

Font: www.habr.com

Afegeix comentari