Skip to content

Commit 315e569

Browse files
committed
Update yara rules models
Signed-off-by: ziad hany <ziadhany2016@gmail.com>
1 parent cdb5210 commit 315e569

4 files changed

Lines changed: 88 additions & 45 deletions

File tree

vulnerabilities/improvers/__init__.py

Lines changed: 37 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -38,43 +38,43 @@
3838

3939
IMPROVERS_REGISTRY = create_registry(
4040
[
41-
valid_versions.GitHubBasicImprover,
42-
valid_versions.GitLabBasicImprover,
43-
valid_versions.NginxBasicImprover,
44-
valid_versions.ApacheHTTPDImprover,
45-
valid_versions.DebianBasicImprover,
46-
valid_versions.NpmImprover,
47-
valid_versions.ElixirImprover,
48-
valid_versions.ApacheTomcatImprover,
49-
valid_versions.ApacheKafkaImprover,
50-
valid_versions.IstioImprover,
51-
valid_versions.DebianOvalImprover,
52-
valid_versions.UbuntuOvalImprover,
53-
valid_versions.OSSFuzzImprover,
54-
valid_versions.RubyImprover,
55-
valid_versions.GithubOSVImprover,
56-
vulnerability_status.VulnerabilityStatusImprover,
57-
valid_versions.CurlImprover,
58-
flag_ghost_packages.FlagGhostPackagePipeline,
59-
enhance_with_kev.VulnerabilityKevPipeline,
60-
enhance_with_metasploit.MetasploitImproverPipeline,
61-
enhance_with_exploitdb.ExploitDBImproverPipeline,
62-
compute_package_risk.ComputePackageRiskPipeline,
63-
compute_package_version_rank.ComputeVersionRankPipeline,
64-
add_cvss31_to_CVEs.CVEAdvisoryMappingPipeline,
65-
remove_duplicate_advisories.RemoveDuplicateAdvisoriesPipeline,
66-
populate_vulnerability_summary_pipeline.PopulateVulnerabilitySummariesPipeline,
67-
exploitdb_v2.ExploitDBImproverPipeline,
68-
enhance_with_kev_v2.VulnerabilityKevPipeline,
69-
flag_ghost_packages_v2.FlagGhostPackagePipeline,
70-
enhance_with_metasploit_v2.MetasploitImproverPipeline,
71-
compute_package_risk_v2.ComputePackageRiskPipeline,
72-
compute_version_rank_v2.ComputeVersionRankPipeline,
73-
compute_advisory_todo_v2.ComputeToDo,
74-
unfurl_version_range_v2.UnfurlVersionRangePipeline,
75-
compute_advisory_todo.ComputeToDo,
76-
collect_ssvc_trees.CollectSSVCPipeline,
77-
relate_severities.RelateSeveritiesPipeline,
41+
# valid_versions.GitHubBasicImprover,
42+
# valid_versions.GitLabBasicImprover,
43+
# valid_versions.NginxBasicImprover,
44+
# valid_versions.ApacheHTTPDImprover,
45+
# valid_versions.DebianBasicImprover,
46+
# valid_versions.NpmImprover,
47+
# valid_versions.ElixirImprover,
48+
# valid_versions.ApacheTomcatImprover,
49+
# valid_versions.ApacheKafkaImprover,
50+
# valid_versions.IstioImprover,
51+
# valid_versions.DebianOvalImprover,
52+
# valid_versions.UbuntuOvalImprover,
53+
# valid_versions.OSSFuzzImprover,
54+
# valid_versions.RubyImprover,
55+
# valid_versions.GithubOSVImprover,
56+
# vulnerability_status.VulnerabilityStatusImprover,
57+
# valid_versions.CurlImprover,
58+
# flag_ghost_packages.FlagGhostPackagePipeline,
59+
# enhance_with_kev.VulnerabilityKevPipeline,
60+
# enhance_with_metasploit.MetasploitImproverPipeline,
61+
# enhance_with_exploitdb.ExploitDBImproverPipeline,
62+
# compute_package_risk.ComputePackageRiskPipeline,
63+
# compute_package_version_rank.ComputeVersionRankPipeline,
64+
# add_cvss31_to_CVEs.CVEAdvisoryMappingPipeline,
65+
# remove_duplicate_advisories.RemoveDuplicateAdvisoriesPipeline,
66+
# populate_vulnerability_summary_pipeline.PopulateVulnerabilitySummariesPipeline,
67+
# exploitdb_v2.ExploitDBImproverPipeline,
68+
# enhance_with_kev_v2.VulnerabilityKevPipeline,
69+
# flag_ghost_packages_v2.FlagGhostPackagePipeline,
70+
# enhance_with_metasploit_v2.MetasploitImproverPipeline,
71+
# compute_package_risk_v2.ComputePackageRiskPipeline,
72+
# compute_version_rank_v2.ComputeVersionRankPipeline,
73+
# compute_advisory_todo_v2.ComputeToDo,
74+
# unfurl_version_range_v2.UnfurlVersionRangePipeline,
75+
# compute_advisory_todo.ComputeToDo,
76+
# collect_ssvc_trees.CollectSSVCPipeline,
77+
# relate_severities.RelateSeveritiesPipeline,
7878
yara_rules.YaraRulesImproverPipeline,
7979
]
8080
)
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# Generated by Django 5.2.11 on 2026-03-25 13:46
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
("vulnerabilities", "0116_detectionrule"),
10+
]
11+
12+
operations = [
13+
migrations.RemoveField(
14+
model_name="detectionrule",
15+
name="advisory",
16+
),
17+
migrations.AddField(
18+
model_name="detectionrule",
19+
name="related_advisories",
20+
field=models.ManyToManyField(
21+
help_text="Advisories associated with this DetectionRule.",
22+
related_name="detection_rules",
23+
to="vulnerabilities.advisoryv2",
24+
),
25+
),
26+
]

vulnerabilities/models.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3684,10 +3684,8 @@ class DetectionRule(models.Model):
36843684

36853685
rule_text = models.TextField(help_text="The content of the detection signature.")
36863686

3687-
advisory = models.ForeignKey(
3687+
related_advisories = models.ManyToManyField(
36883688
AdvisoryV2,
36893689
related_name="detection_rules",
3690-
on_delete=models.SET_NULL,
3691-
null=True,
3692-
blank=True,
3690+
help_text="Advisories associated with this DetectionRule.",
36933691
)

vulnerabilities/pipelines/v2_improvers/yara_rules.py

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,12 @@
1111
from aboutcode.pipeline import LoopProgress
1212
from fetchcode.vcs import fetch_via_vcs
1313

14+
from vulnerabilities.models import AdvisoryAlias
15+
from vulnerabilities.models import AdvisoryV2
1416
from vulnerabilities.models import DetectionRule
1517
from vulnerabilities.models import DetectionRuleTypes
1618
from vulnerabilities.pipelines import VulnerableCodePipeline
19+
from vulnerabilities.utils import find_all_cve
1720
from vulnerabilities.utils import get_advisory_url
1821

1922

@@ -119,7 +122,6 @@ def collect_and_store_rules(self):
119122

120123
rules_count = len(yara_files)
121124
self.log(f"Processing {rules_count:,d} rules from {repo_url}")
122-
123125
progress = LoopProgress(total_iterations=rules_count, logger=self.log)
124126
for file_path in progress.iter(yara_files):
125127
if not file_path.exists() or not file_path.is_file():
@@ -141,13 +143,30 @@ def collect_and_store_rules(self):
141143
url=f"{repo_url}/blob/master/",
142144
)
143145

144-
DetectionRule.objects.update_or_create(
145-
rule_text=raw_text,
146+
cve_ids = find_all_cve(f"{file_path}\n{raw_text}")
147+
148+
advisories = set()
149+
for cve_id in cve_ids:
150+
alias = AdvisoryAlias.objects.filter(alias=cve_id).first()
151+
if alias:
152+
for adv in alias.advisories.all():
153+
advisories.add(adv)
154+
else:
155+
advs = AdvisoryV2.objects.filter(advisory_id=cve_id)
156+
for adv in advs:
157+
advisories.add(adv)
158+
159+
detection_rule, _ = DetectionRule.objects.update_or_create(
146160
rule_type=DetectionRuleTypes.YARA,
147-
advisory=None,
148161
source_url=rule_url,
162+
defaults={
163+
"rule_text": raw_text,
164+
},
149165
)
150166

167+
for adv in advisories:
168+
detection_rule.related_advisories.add(adv)
169+
151170
def clean_downloads(self):
152171
for vcs_response, _ in self.vcs_responses:
153172
if vcs_response:

0 commit comments

Comments
 (0)