#The situation
"A vulnerability that is likely to be exploited remains unfixed (1 item)." The package is webkit2gtk, the CVE is CVE-2026-3909, and it carries a KEV mark. The notification says "update the package."
You update. The warning does not go away.
This is not a made-up story. It is based on a warning that actually appeared. When the assumption "updating fixes it" breaks, the operator is forced to make a call. This module is a playbook for the reasoning behind that call. It uses Matching packages against known vulnerabilities, Diagnosis of vulnerabilities likely to be exploited, and Vulnerability acceptance.
#The first 15 minutes: read the warning
Before you rush, check what the words in the warning mean.
| Shown | Meaning | In this warning |
|---|---|---|
| KEV | A list by CISA (the US cybersecurity agency) of vulnerabilities that were actually exploited (KEV catalog). Organizations are advised to use it as an input for deciding priorities | Listed |
| EPSS | An estimated probability that the CVE will be exploited in the wild within the next 30 days (0 to 1, FIRST). Updated daily | 2% |
| CVSS | A measure of how severe the vulnerability is. It is a separate measure from how easily it gets exploited | 8.8 |
| Fixed version | Whether a fixed version has been published as a package | Not yet |
Two points are easy to overlook.
- The KEV mark means "exploited somewhere." It does not mean your server is being targeted
- The product the CVE describes and the package you installed are not necessarily the same. This CVE's description is "an out-of-bounds write in Skia in Google Chrome." Whether WebKitGTK is actually affected is not settled by the description alone. In Ubuntu's vulnerability tracker, webkit2gtk is
deferredfor both 24.04 and 26.04 (Ubuntu CVE)
When there is no fixed version, RoamSwitch says so: "Fixed version: not yet. Updating the package will not resolve this." You learn from the start that this warning cannot be resolved by updating.
#Decision points
- Is the package used on this machine? If not, removing it is the surest move. The warning goes away too
- If it is used, can an attacker deliver crafted data to it? Check whether it listens on the network, or whether it is used in a way that opens crafted content (web pages, email, and so on)
- Can you mitigate it? Consider stopping the app that uses it, or replacing it with something else
If you cannot answer "yes" to any of the three, consider knowingly accepting it, with an expiry.
#Lab: check the exposure
Check how the package is actually used on this machine. These are read-only commands.
Replace the CVE and the package name to match your own warning.
# 1. The contents of the warning (read-only)
sudo roamswitch scan-packages | grep -A9 "CVE-2026-3909"
# 2. What installed packages depend on it
apt-cache rdepends --installed libwebkit2gtk-4.1-0
# 3. Running processes that have loaded the library right now
sudo grep -l "libwebkit2gtk\|libwebkitgtk" /proc/[0-9]*/maps | cut -d/ -f3 | while read p; do ps -o comm= -p $p; done | sort | uniq -c
# 4. Whether those processes listen on the network (a count per PID; if all are 0, nothing listens)
for p in $(sudo grep -l "libwebkit2gtk\|libwebkitgtk" /proc/[0-9]*/maps | cut -d/ -f3 | sort -u); do sudo ss -lntup | grep -c "pid=$p,"; doneCVE-2026-3909 [Ubuntu 26.04] webkit2gtk 2.52.6-0ubuntu0.26.04.1 (CVSS 8.8)
KEV 米国CISAが、実際に悪用されていることを確認した脆弱性です。
EPSS 2% (2026-11-01)
修正版: まだありません
Reverse Depends:
gir1.2-webkit2-4.1
libedataserverui-1.2-4t64
1 evolution-alarm
1 evolution-sourc
1 gnome-initial-s
0
0
0The warning text follows the language of your RoamSwitch settings (this example is in Japanese). Here, "修正版: まだありません" means "Fixed version: not yet." What we learned:
- What depends on it is the Evolution mail client and a GNOME initial-setup component. Neither relates to the server's job
- What is running now is only Evolution's background processing. No screen that opens web pages or mail is running
- None of the three processes listens on a port (0 each). There is no route that reaches them directly from the network
In step 4, match by PID, not by process name. If you filter by name, as in ss -ltnp | grep webkit, you get 0 only because the process name does not contain "webkit," even when the process is listening, and you miss it. You can check that your method is right by trying it on a process you know is listening (for example sshd).
#Accept it, with an expiry
Suppose the answers to the three questions lead you to this: "it is used, it is not used in a way that opens crafted data, nothing listens, and there is no mitigation for now." Recording it with a reason and an expiry is called acceptance.
The command below leaves a record (~/.config/roamswitch/vuln_acceptances.json). The labs in this lesson do not run it. Run it in real operation, after you have made your decision.
sudo roamswitch vuln-accept Ubuntu webkit2gtk CVE-2026-3909 \
--version 2.52.6-0ubuntu0.26.04.1 --days 30 \
--reason 'Ubuntu deferred, no fixed version. The CVE is Chrome Skia. Only Evolution etc. use webkit2gtk, no network listeners. Re-evaluate in 30 days'Ubuntu webkit2gtk CVE-2026-3909 (2.52.6-0ubuntu0.26.04.1)
期限: 2026-12-03 (あと29日)
理由: Ubuntuが対応見送り(deferred)で修正版なし。CVEはChromeのSkia。(以下略)
記録: tetsuharu (2026-11-03)The labels mean: 期限 is the expiry (29 days left), 理由 is the reason, and 記録 is who recorded it and when. The nature of acceptance:
- It is not a fix. The warning leaves the "needs action" count and is counted separately as "accepted." It stays in the list
- It has an expiry. The default is 90 days and the maximum is 365 days. When it arrives, the item returns to "needs action" and a record is left
- A reason is required. Later, anyone can read who accepted it and why
- It applies only to that version. If the package changes to another vulnerable version, it becomes a new finding that needs action
#When the expiry arrives
The expiry is a scheduled re-evaluation. On that day, check in this order.
- Has a fixed version been released? (Check with
apt-cache policyand the vendor's vulnerability tracker) - Is this package still needed? If you no longer use it, remove it
- Has the situation changed? (a new way of using it, a case of opening crafted data, and so on)
- If you still accept it, write a new reason and record it again
- Accept without writing a reason. Your later self, and other operators, can no longer read the basis for the decision
- Choose the maximum 365 days without thinking. The expiry is the day you look again
- Ignore it without checking because "it is a Chrome issue." You can only say that after you have checked the relation between the description and the package you installed
- Turn off the check itself to silence the warning. It only becomes invisible; the situation does not change
#What it cannot see
- Whether this package is actually affected by this CVE cannot be known from the warning. The warning comes from matching package name and version against a vulnerability map
- The method in step 3 sees only what is running now. An app that starts later is a separate matter
- The map is updated regularly. New information can change the situation (a fixed version appears, a report of exploitation is added, and so on)
- Acceptance does not lower the risk. What lowers it is mitigation (removing, stopping, replacing)
Which is correct about the state after you record an acceptance?
Show the explanation
Acceptance is a record of the decision to "knowingly leave it, with an expiry." It does not mean it was fixed. When the expiry arrives, it is time to re-evaluate.
Verified on 2026-11-03. Target: Linux 1.17.30. The steps used on a real warning (webkit2gtk) on Ubuntu 26.04, Server Edition
Command output varies with the product version and the environment. If yours differs, check the version first.