From: Gregory CLEMENT <gregory.clement@bootlin.com>
To: buildroot@busybox.net
Subject: [Buildroot] [PATCH 09/10] support/scripts/{pkg-stats, cve.py, cve-checker}: support CPE ID based matching
Date: Fri, 06 Nov 2020 15:48:58 +0100 [thread overview]
Message-ID: <877dqy8rs5.fsf@BL-laptop> (raw)
In-Reply-To: <20201105175908.56822567@windsurf.home>
Hi Thomas,
> On Thu, 05 Nov 2020 15:55:56 +0100
> Gregory CLEMENT <gregory.clement@bootlin.com> wrote:
>
>> > + # if we don't have a cpeid, build one based on name and version
>> > + if not cpeid:
>> > + cpeid = "cpe:2.3:*:*:%s:%s:*:*:*:*:*:*:*" % (name, version)
>> > +
>> > for cpe in self.each_cpe():
>> > - if cpe['product'] != name:
>> > + if not cpe_matches(cpe['id'], cpeid):
>> > continue
>>
>> Here you compare the full cpeid including the version to the cpeid
>> associated to the CVE. But if the CVE is about a range of version (using
>> versionStartIncluding for instance), then this test may file was
>> actually the package would be affected because the version is inside the
>> range of version affected.
>
> So, a package will have a CPE ID like this:
>
> cpe:2.3:a:vendor:product:1.0.4:*:*:*:*:*:*:*
>
> Then, a CVE will have two cases:
>
> - Either it has a CPE ID that includes directly a version, like:
>
> cpe:2.3:a:vendor:product:1.0.3:*:*:*:*:*:*:*
>
> In this case, the cpe_matches() function will return False, because
> indeed 1.0.3 isn't the same as 1.0.4
>
> - Or it has a CPE ID that does *NOT* include a version, because the
> version is specified separately through versionStartIncluding and
> similar properties. In this case, the CPE ID of the CVE will look
> like this:
>
> cpe:2.3:a:vendor:product:*:*:*:*:*:*:*:*
>
> Notice how the "version" field is "*". The cpe_matches() function
> handles "*" as a wildcard, and will allow it to match any value. So
> "*" matches "1.0.4", which means in this situation, cpe_matches()
> will return True, so the code logic will continue, and test if we're
> in the version range or not.
>
> The code goes like this:
>
> if not cpe_matches(cpe['id'], cpeid):
> # The CPE doesn't match, so skip
> continue
>
> if not cpe['v_start'] and not cpe['v_end']:
> # The CPE matches *and* we don't have a version range, so we know the CVE affects us
> return self.CVE_AFFECTS
>
> if not pkg_version:
> # The version of the package couldn't be parsed, so we're not able to compare it
> # with distutils.version.LooseVersion(), so skip
> continue
>
> # and then here we handle the version range (code was not changed)
>
> Does this explain how it works ? Let me know if you still see an issue,
> because I could also be missing something.
Yes it makes sens now. The key point is that when using the keywords
like versionStartIncluding, then the CPE ID referenced in database will
use wildcard for the version. I overlooked this.
Thanks for the explanation.
Gregory
>
> Note: I checked the JSON output of pkg-stats before and after this
> commit, and it is identical.
>
> Best regards,
>
> Thomas
> --
> Thomas Petazzoni, CTO, Bootlin
> Embedded Linux and Kernel engineering
> https://bootlin.com
--
Gregory Clement, Bootlin
Embedded Linux and Kernel engineering
http://bootlin.com
next prev parent reply other threads:[~2020-11-06 14:48 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-11-04 14:51 [Buildroot] [PATCH 00/10] Introduce CPE ID matching for CVEs Thomas Petazzoni
2020-11-04 14:51 ` [Buildroot] [PATCH 01/10] support/scripts/cve.py: properly match CPEs with version '*' Thomas Petazzoni
2020-11-04 16:45 ` Matthew Weber
2020-11-04 16:54 ` Thomas Petazzoni
2020-11-26 15:32 ` Thomas Petazzoni
2020-11-04 14:51 ` [Buildroot] [PATCH 02/10] support/scripts/cve-checker: parse arguments earlier Thomas Petazzoni
2020-11-26 15:32 ` Thomas Petazzoni
2020-11-04 14:51 ` [Buildroot] [PATCH 03/10] package/pkg-generic.mk: add CPE ID related package variables Thomas Petazzoni
2020-11-04 17:03 ` Matthew Weber
2020-11-05 17:02 ` Thomas Petazzoni
2020-11-12 7:40 ` Heiko Thiery
2020-11-26 15:34 ` Thomas Petazzoni
2020-11-04 14:51 ` [Buildroot] [PATCH 04/10] docs/manual: document <pkg>_CPE_ID variables Thomas Petazzoni
2020-11-04 17:06 ` Matthew Weber
2020-11-12 7:36 ` Heiko Thiery
2020-11-26 15:36 ` Thomas Petazzoni
2020-11-04 14:51 ` [Buildroot] [PATCH 05/10] package/pkg-utils.mk: expose CPE ID in show-info when available Thomas Petazzoni
2020-11-04 17:09 ` Matthew Weber
2020-11-12 7:44 ` Heiko Thiery
2020-11-26 15:37 ` Thomas Petazzoni
2020-11-04 14:51 ` [Buildroot] [PATCH 06/10] support/testing/tests/core/test_cpeid: new test Thomas Petazzoni
2020-11-04 17:12 ` Matthew Weber
2020-11-26 15:37 ` Thomas Petazzoni
2020-11-04 14:51 ` [Buildroot] [PATCH 07/10] support/scripts/cve-checker: show CPE ID in results Thomas Petazzoni
2020-11-04 17:20 ` Matthew Weber
2020-11-26 15:38 ` Thomas Petazzoni
2020-11-04 14:51 ` [Buildroot] [PATCH 08/10] support/script/pkg-stats: " Thomas Petazzoni
2020-11-04 17:18 ` Matthew Weber
2020-11-05 17:01 ` Thomas Petazzoni
2020-11-05 17:20 ` Matthew Weber
2020-11-12 7:59 ` Heiko Thiery
2021-01-11 22:37 ` Arnout Vandecappelle
2021-01-12 15:23 ` Thomas Petazzoni
2020-11-04 14:51 ` [Buildroot] [PATCH 09/10] support/scripts/{pkg-stats, cve.py, cve-checker}: support CPE ID based matching Thomas Petazzoni
2020-11-04 18:33 ` Matthew Weber
2020-11-05 8:46 ` Peter Korsgaard
2020-11-05 8:55 ` Thomas Petazzoni
2020-11-05 14:55 ` Gregory CLEMENT
2020-11-05 16:59 ` Thomas Petazzoni
2020-11-06 14:48 ` Gregory CLEMENT [this message]
2020-11-04 14:51 ` [Buildroot] [PATCH 10/10] package: provide CPE ID details for numerous packages Thomas Petazzoni
2020-11-04 15:42 ` Alexander Dahl
2020-11-04 15:49 ` Thomas Petazzoni
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=877dqy8rs5.fsf@BL-laptop \
--to=gregory.clement@bootlin.com \
--cc=buildroot@busybox.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox