Yes. That's exactly the problem Piotr. We have no "we don't know and we
will likely never tell you". Unless we use "in_triage" for that. I don't
think there is any expectation on how long "in triage" will be, but except
some specific cases, I don't see how our VEX's could have anything else
than "in_triage" for vast majority of CVEs

I can set "in_triage" - even automatically for all CVEs in all 700
dependencies - that could be easily automated for volunteer driven projects
with many dependencies. If that would be our approach - fine (exploitable
etc we can also set it in case we have log4j). we can set "false_positive"
(also automatically) for all the dependencies that are "accidentally" in
our SBOM (though I'd rather fix SBOM in this case).

And yes, we can even play around that automation to make it manageable and
maybe even "sometimes" set a different stage there. But there are some
caveats/

QUESTION: I wonder what are you all thinking about what should the VEXes be
published about? Should we publish it for all versions released?

When Airflow (for example) has 700+ dependencies and we have about, 50 of
`2.*` airflow packages released  + about 90 providers (each with 20
versions of so) - this is about 2000 vex files to keep updated every time
one of those versions of one of those libraries we publish gets updated
with a new CVE - if we were to publish them for all versions our users can
have in the maintained line.

So the only way we can do it is to automate generation of those VEXs,
putting "in-triage" everywhere - realistically.  But there is absolutely no
way any of those entries will be "not affected" in scale. Maybe there are
few cases where I could have certainty and "know" it's not affected - but
anything else requires a lot of time to even get close to a conclusion
(multiplied by 100s or 1000s of vulnerabilities and potentially multiplied
by all the versions we released). I am almost sure we cannot set
"exploitable" as well with any reasonable certainty. because that requires
manual checking if the problem is exploitable in particular versions. We
could of course put "exploitable" in all cases, but that would miss the
point of having this state informative.

Of course - we could also put only information about those issues someone
ask us for, but in no-time this will be automated by commercial users and
we will get asked about every single CVE published for any of our
dependencies - this will happen a day after those commercial users will be
asked to use those VEX's in their analysis. We will get flooded by
questions 'what is the state of this or that dependency". In no time at all
we will have to put the state for All CVEs in all our dependencies when we
publish VEX.

If we don't automate it, we have no chance to deal with that - simply
because our current work on analysing those will get multiplied by 10 or 20
or 700 times, depending on how many dependencies we have. Even if we limit
ourselves to direct dependencies and rely on their VEX's. I am afraid that
will end up with everyone putting stuff to "in_triage' and calling it a day
eventually - I don't see how other open-source projects could do it
differently.

Of course we can start thinking how to make it more "reasonable" - i.e.
built in the fact that we have volunteers and limited time.

I can think of one way we could make it manageable  - we only publish VEX's
for the last released version in the "maintained" line of a package - that
could give better chances that what is there is "right" - and reject any
requests and questions about past versions - essentially "freeze" VEXs for
previous versions when we release a new one. That **might** have a chance
to work, because in the vast majority of cases the CVES found in 3rd-party
libraries will be for old versions of those that we won't use already in
the last version. That would dramatically drop the exposure for users
asking for state (providing that we automate that and filter out
automatically and reject the questions about past versions - it's pretty
doable). We could even - in this case make a dependabot-style automated and
proactive work, whenever a vulnerabilty is detected in a library, we could
see if it is already updated in the "in-progress" version and act
accordingly and automatically publish state in the last VEX "in_triage" for
example, and maybe have a way to manually review and update those (but only
for last released version in the maintained line). We could allow
indefinite "in triage" in this case if we are not sure, and maybe sometimes
- very rarely we could put "not affected". but that would be a unicorn
IMHO.

But then - except the few exceptions - there is no real value from having
such VEXs if you ask me. That will become a cargo cult very quickly.

J.

On Thu, Feb 6, 2025 at 10:02 AM Piotr P. Karwasz <pi...@mailing.copernik.eu>
wrote:

> Hi Jarek,
>
> On 6.02.2025 09:22, Jarek Potiuk wrote:
> >> I don't see how VEX introduces a new risk here.
> > It really depends on whether the VEX entry states: "Not affected" or
> > "Possibly not affected". As you see in my responses - those are exactly
> > what I am explaining in my responses is exactly what you explained. In
> one
> > of those issues I responded to the user that "we do not use that affected
> > functionally, so likely we are not affected". But yet the user demanded,
> > and expected and was very persistent about it, to have 100% certainty and
> > an authoritative answer.
> >
> > I am absolutely fine in putting in VEX:
> >
> > * don't know, did not check (when we did not want to spend days
> > investigating it and it's difficult)
> > * possibly not affected (when we think we are not affected)
> > * affected, please upgrade (when we know)
>
> I think I understand, where the problem lies. Looking only a
> CycloneDX[1] there are two important fields to describe a VEX entry:
>
> * A `state` field with values in: resolved, resolved_with_pedigree,
> exploitable, in_triage, false_positive, not_affected. There is no
> "possibly not affected" state.
>
> * A `detail` field, where we describe the problem to humans, including
> how we did come to a certain conclusion:
>
> ```
>
> Detailed description of the impact including methods used during
> assessment. If a vulnerability is not exploitable, this field should
> include specific details on why the component or service is not impacted
> by this vulnerability.
>
> ```
>
> I believe that as long as we fill in this carefully, the risk for the
> Foundation is minimal. The whole point of publishing a VEX statement
> (currently optional) is NOT to use an `exploitable` state and write "We
> did not perform any exploitability analysis, but unit/integration tests
> show that the patched version of `libfoo` is compatible with our
> library. Please upgrade the vulnerable component."
>
> Piotr
>
> [1] https://cyclonedx.org/docs/1.6/json/#vulnerabilities_items_analysis
>
>

Reply via email to