Open Marcono1234 opened 1 year ago
Hi there, thanks for the discussion! Would you be able to speak a bit more around the use case for a more detailed withdrawn field?
The OSV Schema is primarily meant to help with enabling automation for common vulnerability management workflows (e.g. vulnerability scanning, vulnerability interchange between databases), and to be as minimal as possible. Is there a strong case to be made for a dedicated withdrawn reason and how a user would make use of this?
First of all, as short disclaimer, at least for the GitHub Advisory Database the number of withdrawn advisories only represented a small percentage (~1,4% of all GitHub-reviewed advisories were withdrawn, see https://github.com/github/advisory-database/discussions/2420), so it is understandable if you think some of this is not worth the effort. For this university project we simply decided to explicitly look at the withdrawn advisories, which is why this issue is so focused on that.
Would you be able to speak a bit more around the use case for a more detailed withdrawn field? [...] how a user would make use of this?
I can imagine at least two situations where this would be useful: Let's say you noticed an advisory (without any tooling) for one of your dependencies and started to investigate it, but the next day the advisory is withdrawn. Or you are using automated tooling which previously reported a vulnerability and now stopped reporting it because the advisory is withdrawn. Then you might want to understand why the advisory was withdrawn, especially if you already investigating it and came to the conclusion that you are affected. Maybe the advisory was withdrawn because it covered a rare specific corner case or unintended usage, but your application just happens to use that dependency in this unsafe way.
The other situation is when there are multiple vulnerability databases involved and the advisory is withdrawn in one (but without proper reason) but not the other. You might then wonder which information is correct, and the detailed withdrawal information might make this easier for you. Let's take for example GHSA-7mg7-m5c3-3hqj, as you see the advisory is withdrawn but it links to a RustSec advisory which has not been withdrawn. It turns out that first GitHub advisory is actually a duplicate of another one, but this is not obvious from the first GitHub advisory at all (this is also mentioned in https://github.com/github/advisory-database/discussions/2420).
These are cases where I imagine more detailed withdrawal information would be useful, there might be more cases. Though the question is how often users actually encounter such situations, and what experience other users have made so far with withdrawn advisories.
Hello, for a university project a fellow student and I had a look in December 2022 at the back then 141 GitHub-reviewed withdrawn advisories in the GitHub Advisory Database, which uses the OSV schema. Back then we noticed the following main issues:
Based on this we suggest:
withdrawn_reason
(Markdown text field), which is mandatory when an advisory is withdrawnwithdrawn_reason
should be set. The originalsummary
anddetails
should remain unchanged. Vulnerability database UIs should properly indicate that an advisory is withdrawn without having to rely on special (non-standard)summary
texts.withdrawn_reason
should shortly describe the reason and optionally link to discussions (e.g. GitHub issues) for additional information. Only referring to a GitHub issue (especially without referring to a specific summarizing comment) should be avoided.withdrawn_reason
field. Or alternatively as proposed in #53, there should be standard relationship types to indicate the duplicated advisory.We hope this information is helpful. What do you think?
Here is the discussion specific to the GitHub Advisory Database: https://github.com/github/advisory-database/discussions/2420
[^1]: Maybe this is also a bug / ambiguity in the documentation, because I assume you mean with "summary" here the
details
and not thesummary
field, since thesummary
is the plaintext title and you can hardly describe the reason there in much detail.