diff options
| author | GeogeFI | 2022-03-19 10:00:36 +0100 |
|---|---|---|
| committer | GeogeFI | 2022-03-19 10:00:36 +0100 |
| commit | 969d2adc0122ea0d32fb871d73d42494ffe8c951 (patch) | |
| tree | d8cf71f82da8afe239f845c39e1d06c325440d21 | |
| parent | b5254d46ea69f54dbb501675c8d264da0c7a020a (diff) | |
| download | sec-certs-969d2adc0122ea0d32fb871d73d42494ffe8c951.tar.gz sec-certs-969d2adc0122ea0d32fb871d73d42494ffe8c951.tar.zst sec-certs-969d2adc0122ea0d32fb871d73d42494ffe8c951.zip | |
feat: Direct dependency vulnerabilities - naive solution
| -rw-r--r-- | sec_certs/dataset/common_criteria.py | 5 | ||||
| -rw-r--r-- | sec_certs/sample/common_criteria.py | 23 |
2 files changed, 28 insertions, 0 deletions
diff --git a/sec_certs/dataset/common_criteria.py b/sec_certs/dataset/common_criteria.py index 6a2fcbb9..c5966c97 100644 --- a/sec_certs/dataset/common_criteria.py +++ b/sec_certs/dataset/common_criteria.py @@ -684,12 +684,17 @@ class CCDataset(Dataset[CommonCriteriaCert], ComplexSerializableType): for cert in self: cert.compute_heuristics_cert_id(self.all_cert_ids) + def _compute_dependency_vulnerabilities(self): + for cert in self: + cert.find_certificate_dependency_vulnerabilities(self) + def _compute_heuristics(self, use_nist_cpe_matching_dict: bool = True) -> None: self._compute_cert_labs() self._compute_normalized_cert_ids() self._compute_dependencies() _, _, cve_dset = self.compute_cpe_heuristics() self.compute_related_cves(use_nist_cpe_matching_dict=use_nist_cpe_matching_dict, cve_dset=cve_dset) + self._compute_dependency_vulnerabilities() def _compute_dependencies(self) -> None: def ref_lookup(kw_attr): diff --git a/sec_certs/sample/common_criteria.py b/sec_certs/sample/common_criteria.py index 046d7ba7..536125e3 100644 --- a/sec_certs/sample/common_criteria.py +++ b/sec_certs/sample/common_criteria.py @@ -241,6 +241,8 @@ class CommonCriteriaCert( cert_id: Optional[str] = field(default=None) st_references: References = field(default_factory=References) report_references: References = field(default_factory=References) + direct_vulnerabilities: Optional[Set[str]] = field(default=None) + indirect_vulnerabilities: Optional[Set[str]] = field(default=None) @property def serialized_attributes(self) -> List[str]: @@ -684,6 +686,27 @@ class CommonCriteriaCert( self.heuristics.cert_id = self.pdf_data.cert_id self.normalize_cert_id(all_cert_ids) + def find_certificate_dependency_vulnerabilities(self, dset): + if not self.heuristics.report_references.directly_referenced_by: + return None + + direct_vulnerabilities = set() + + for cert_id in self.heuristics.report_references.directly_referenced_by: + + for cert_obj in dset: + if cert_obj.heuristics.cert_id == cert_id: + if cert_obj.heuristics.related_cves: + print(f"Related CVEs: {cert_obj.heuristics.related_cves}") + direct_vulnerabilities.update(cert_obj.heuristics.related_cves) + + print(direct_vulnerabilities) + + if not direct_vulnerabilities: + return None + + self.heuristics.direct_vulnerabilities = direct_vulnerabilities + @staticmethod def _is_anssi_cert(cert_id: str) -> bool: return cert_id.startswith("ANSS") |
