aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGeogeFI2022-03-19 10:00:36 +0100
committerGeogeFI2022-03-19 10:00:36 +0100
commit969d2adc0122ea0d32fb871d73d42494ffe8c951 (patch)
treed8cf71f82da8afe239f845c39e1d06c325440d21
parentb5254d46ea69f54dbb501675c8d264da0c7a020a (diff)
downloadsec-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.py5
-rw-r--r--sec_certs/sample/common_criteria.py23
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")