Skip to content

Commit 8daf1df

Browse files
committed
Collect vulnerabilities from arch linux #20
Signed-off-by: lohani2280 <lohani.ayush01@gmail.com>
1 parent 55a633d commit 8daf1df

5 files changed

Lines changed: 167 additions & 1 deletion

File tree

vulnerabilities/data_dump.py

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,13 @@
2121
# VulnerableCode is a free software code scanning tool from nexB Inc. and others.
2222
# Visit https://github.com/nexB/vulnerablecode/ for support and download.
2323

24+
2425
from vulnerabilities.models import ImpactedPackage
26+
from vulnerabilities.models import ResolvedPackage
2527
from vulnerabilities.models import Package
2628
from vulnerabilities.models import Vulnerability
2729
from vulnerabilities.models import VulnerabilityReference
30+
from vulnerabilities.models import PackageReference
2831

2932

3033
def debian_dump(extract_data):
@@ -68,3 +71,64 @@ def ubuntu_dump(html):
6871
vulnerability=vulnerability,
6972
package=package
7073
)
74+
75+
76+
def archlinux_dump(extract_data):
77+
"""
78+
Save data scraped from archlinux' security tracker.
79+
"""
80+
for item in extract_data:
81+
cves = item['issues']
82+
advisories = item['advisories']
83+
group = item['name']
84+
85+
unique_advisories = []
86+
for x in advisories:
87+
if x not in unique_advisories:
88+
unique_advisories.append(x)
89+
90+
vulnerabilities = cves + unique_advisories
91+
vulnerabilities.append(group)
92+
packages_name = item['packages']
93+
94+
affected_version = item['affected']
95+
fixed_version = item['fixed']
96+
if not fixed_version:
97+
fixed_version = 'None'
98+
99+
vulnerability = Vulnerability.objects.create(
100+
summary=item['type'],
101+
)
102+
103+
for vulnerability_id in vulnerabilities:
104+
VulnerabilityReference.objects.create(
105+
vulnerability=vulnerability,
106+
reference_id=vulnerability_id,
107+
url='https://security.archlinux.org/%s' % vulnerability_id
108+
)
109+
110+
for package_name in packages_name:
111+
package_affected = Package.objects.create(
112+
name=package_name,
113+
version=affected_version
114+
)
115+
ImpactedPackage.objects.create(
116+
vulnerability=vulnerability,
117+
package=package_affected
118+
)
119+
PackageReference.objects.create(
120+
package=package_affected,
121+
repository='https://security.archlinux.org/package/%s' % package_name
122+
)
123+
package_fixed = Package.objects.create(
124+
name=package_name,
125+
version=fixed_version
126+
)
127+
ResolvedPackage.objects.create(
128+
vulnerability=vulnerability,
129+
package=package_fixed
130+
)
131+
PackageReference.objects.create(
132+
package=package_fixed,
133+
repository='https://security.archlinux.org/package/%s' % package_name
134+
)
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
#
2+
# Copyright (c) 2017 nexB Inc. and others. All rights reserved.
3+
# http://nexb.com and https://github.com/nexB/vulnerablecode/
4+
# The VulnerableCode software is licensed under the Apache License version 2.0.
5+
# Data generated with VulnerableCode require an acknowledgment.
6+
#
7+
# You may not use this software except in compliance with the License.
8+
# You may obtain a copy of the License at: http://apache.org/licenses/LICENSE-2.0
9+
# Unless required by applicable law or agreed to in writing, software distributed
10+
# under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
11+
# CONDITIONS OF ANY KIND, either express or implied. See the License for the
12+
# specific language governing permissions and limitations under the License.
13+
#
14+
# When you publish or redistribute any data created with VulnerableCode or any VulnerableCode
15+
# derivative work, you must accompany this data with the following acknowledgment:
16+
#
17+
# Generated with VulnerableCode and provided on an "AS IS" BASIS, WITHOUT WARRANTIES
18+
# OR CONDITIONS OF ANY KIND, either express or implied. No content created from
19+
# VulnerableCode should be considered or used as legal advice. Consult an Attorney
20+
# for any legal advice.
21+
# VulnerableCode is a free software code scanning tool from nexB Inc. and others.
22+
# Visit https://github.com/nexB/vulnerablecode/ for support and download.
23+
24+
import json
25+
from urllib.request import urlopen
26+
27+
ARCHLINUX_TRACKER_URL = 'https://security.archlinux.org/json'
28+
29+
30+
def scrape_vulnerabilities():
31+
"""
32+
Returns data scraped from archlinux' security tracker.
33+
"""
34+
json_content = urlopen(ARCHLINUX_TRACKER_URL).read()
35+
arch_data = json.loads(json_content)
36+
return arch_data
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
[
2+
{
3+
"name": "AVG-708",
4+
"packages": [
5+
"wireshark-common",
6+
"wireshark-gtk",
7+
"wireshark-cli",
8+
"wireshark-qt"
9+
],
10+
"status": "Fixed",
11+
"severity": "Critical",
12+
"type": "multiple issues",
13+
"affected": "2.6.0-1",
14+
"fixed": "2.6.1-1",
15+
"ticket": null,
16+
"issues": [
17+
"CVE-2018-11362",
18+
"CVE-2018-11361",
19+
"CVE-2018-11360",
20+
"CVE-2018-11359",
21+
"CVE-2018-11358",
22+
"CVE-2018-11357",
23+
"CVE-2018-11356",
24+
"CVE-2018-11355",
25+
"CVE-2018-11354"
26+
],
27+
"advisories": [
28+
"ASA-201805-25",
29+
"ASA-201805-24",
30+
"ASA-201805-22",
31+
"ASA-201805-23"
32+
]
33+
}
34+
]

vulnerabilities/tests/test_data_dump.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,16 @@
2828

2929
from vulnerabilities.models import Vulnerability
3030
from vulnerabilities.models import VulnerabilityReference
31+
from vulnerabilities.models import PackageReference
32+
from vulnerabilities.models import ImpactedPackage
33+
from vulnerabilities.models import ResolvedPackage
3134
from vulnerabilities.models import Package
3235
from vulnerabilities.data_dump import debian_dump
3336
from vulnerabilities.data_dump import ubuntu_dump
37+
from vulnerabilities.data_dump import archlinux_dump
3438
from vulnerabilities.scraper import debian
3539
from vulnerabilities.scraper import ubuntu
40+
from vulnerabilities.scraper import archlinux
3641

3742

3843
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
@@ -85,3 +90,30 @@ def test_ubuntu_data_dump(self):
8590
reference = VulnerabilityReference.objects.filter(reference_id='CVE-2002-2439')[0]
8691
self.assertEqual(reference.reference_id, 'CVE-2002-2439')
8792
self.assertTrue(Package.objects.filter(name='gcc-4.6')[0].name, 'gcc-4.6')
93+
94+
def test_archlinux_data_dump(self):
95+
"""
96+
Scrape data from Archlinux' main tracker, save it
97+
in the database and verify entries.
98+
"""
99+
with open(os.path.join(TEST_DATA, 'archlinux.json')) as f:
100+
test_data = json.loads(f.read())
101+
102+
archlinux_dump(test_data)
103+
104+
self.assertEqual(1, Vulnerability.objects.count())
105+
self.assertEqual(14, VulnerabilityReference.objects.count())
106+
self.assertEqual(8, Package.objects.count())
107+
self.assertEqual(8, PackageReference.objects.count())
108+
self.assertEqual(4, ImpactedPackage.objects.count())
109+
self.assertEqual(4, ResolvedPackage.objects.count())
110+
111+
self.assertTrue(Vulnerability.objects.get(summary='multiple issues'))
112+
113+
self.assertTrue(VulnerabilityReference.objects.get(reference_id='CVE-2018-11360'))
114+
115+
self.assertTrue(VulnerabilityReference.objects.get(reference_id='ASA-201805-24'))
116+
117+
self.assertTrue(VulnerabilityReference.objects.get(reference_id='AVG-708'))
118+
119+
self.assertEqual(Package.objects.filter(name='wireshark-cli')[0].name, 'wireshark-cli')

vulnerabilities/tests/test_scrapers.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727

2828
from vulnerabilities.scraper import debian
2929
from vulnerabilities.scraper import ubuntu
30-
30+
from vulnerabilities.scraper import archlinux
3131

3232
def test_ubuntu_extract_cves():
3333
ubuntu_testfile = join(dirname(__file__), 'test_data', 'ubuntu_main.html')

0 commit comments

Comments
 (0)