Exemplo n.º 1
0
 def process(self):
     """Delete CVE node from graph."""
     json_payload = self.prepare_payload()
     try:
         # Delete cve and its references
         call_gremlin(json_payload)
     except ValueError as e:
         logger.error('Snyk CVEDeletionError - Error deleting vulnerability: {c}'.
                      format(c=self._cve_id_dict.get('id')))
         raise InternalServerError("Snyk CVEDeletionError - While deleting vulnerability") from e
Exemplo n.º 2
0
 def put(payload):
     """Update CVEDB version."""
     json_payload = {
         'gremlin': cvedb_version_replace_script_template,
         'bindings': {
             'cvedb_version': payload.get('version')
         }
     }
     call_gremlin(json_payload)
     return payload.get('version')
Exemplo n.º 3
0
 def get():
     """Get CVEDB version."""
     json_payload = {
         'gremlin': cvedb_version_get_script_template,
     }
     response = call_gremlin(json_payload)
     data = response.get('result', {}).get('data', [])
     return data[0] if data else None
Exemplo n.º 4
0
    def process(self):
        """Add or replace CVE node in graph."""
        # Create EPV nodes first and get a list of failed EPVs
        # If any of the EPV creation failed, then do not attempt further processing
        succesfull_epvs, all_epvs_succesfull, affected_pkgs = self.create_pv_nodes()

        if all_epvs_succesfull:
            try:
                # Create CVE node
                call_gremlin(
                    self.prepare_payload(*self.get_qstring_for_cve_node())
                )
            except ValueError:
                logger.error('CVEIngestionError - Error creating CVE node: {c}'.format(
                    c=self._cve_dict['cve_id']))
            else:
                try:
                    # Connect CVE node with affected EPV nodes
                    for query_str in self.get_qstrings_for_edges():
                        call_gremlin(self.prepare_payload(query_str, self._get_default_bindings()))
                    logger.debug("CVEIngestionDebug - CVE sub-graph succesfully created for "
                                 "CVE node: {c}".format(c=self._cve_dict['cve_id']))
                    logger.info("Updating non cve latest version")
                    update_non_cve_version(affected_pkgs)
                except ValueError:
                    logger.error("CVEIngestionError - Error creating CVE edges."
                                 "Rolling back CVE node: {c}".format(c=self._cve_dict['cve_id']))
                    call_gremlin(self.prepare_payload(cvedb_roll_back_cve_template,
                                                      self._get_default_bindings()))
        else:
            logger.error('CVEIngestionError - Error creating EPV nodes for CVE node: {c}'.format(
                c=self._cve_dict['cve_id']))
Exemplo n.º 5
0
    def process(self):
        """Add or replace CVE node in graph."""
        # Create EPV nodes first and get a list of failed EPVs
        # If any of the EPV creation failed, then do not attempt further processing
        succesfull_epvs, all_epvs_succesfull, affected_pkgs = self.create_pv_nodes(
        )
        logger.info("PV nodes created for snyk")

        if all_epvs_succesfull:
            for vulnerability in self._snyk_pkg_data.get('vulnerabilities'):
                try:
                    # Create CVE node
                    call_gremlin(
                        self.prepare_payload(
                            *self.get_qstring_for_cve_node(vulnerability)))
                except ValueError as e:
                    logger.error(
                        'Snyk CVEIngestionError - Error creating CVE node: {c}'
                        .format(c=vulnerability['id']))
                    raise InternalServerError(
                        "Snyk CVEIngestionError - "
                        "While Error creating CVE node.") from e
                else:
                    if len(vulnerability.get('affected')) > 0:
                        try:
                            # Connect CVE node with affected EPV nodes
                            edge_query = add_affected_snyk_edge_script_template
                            edge_bindings = self._get_default_bindings(
                                vulnerability)
                            for vuln_version in vulnerability.get('affected'):
                                edge_bindings['vuln_version'] = vuln_version
                                call_gremlin(
                                    self.prepare_payload(
                                        edge_query, edge_bindings))
                            logger.info(
                                "Snyk CVEIngestionDebug - CVE sub-graph succesfully "
                                "created for CVE node: {c}".format(
                                    c=vulnerability['id']))
                            logger.info(
                                "Updating non cve latest version (snyk)")
                            update_non_cve_version(affected_pkgs)
                        except ValueError as e:
                            logger.error(
                                "Snyk CVEIngestionError - Error creating CVE edges."
                                "Rolling back CVE node: {c}".format(
                                    c=vulnerability['id']))
                            call_gremlin(
                                self.prepare_payload(
                                    snyk_roll_back_cve_template,
                                    self._get_default_bindings(vulnerability)))
                            raise InternalServerError(
                                "Snyk CVEIngestionError - "
                                "While creating CVE edges.") from e
        else:
            logger.error(
                'CVEIngestionError - Error creating EPV nodes for package: {e} {p}'
                .format(e=self._snyk_pkg_data.get('ecosystem'),
                        p=self._snyk_pkg_data.get('package')))
            raise InternalServerError(
                "CVEIngestionError - While creating EPV nodes for package.")
Exemplo n.º 6
0
 def get_cves(self, script, bindings):
     """Call Gremlin and get the CVE information."""
     json_payload = self.prepare_payload(script, bindings)
     response = call_gremlin(json_payload)
     cve_list = response.get('result', {}).get('data', [])
     return {'count': len(cve_list), 'cve_ids': cve_list}
Exemplo n.º 7
0
 def process(self):
     """Delete CVE node from graph."""
     json_payload = self.prepare_payload()
     call_gremlin(json_payload)
Exemplo n.º 8
0
def test_bad_gremlin_call(mocker):
    """Test utils.call_gremlin()."""
    mocker.return_value = RequestsMockResponse({}, 500)
    with pytest.raises(ValueError):
        call_gremlin({'dummy': 'payload'})
Exemplo n.º 9
0
def test_gremlin_call(mocker):
    """Test utils.call_gremlin()."""
    mocker.return_value = RequestsMockResponse({}, 200)
    assert call_gremlin({'dummy': 'payload'}) == {}