Disable screenshots
The qubes-gnome-software-plugin disables screenshots before loading, due to security concerns.
Gnome Software Screenshots
Gnome Software screenshots follow AppStream to get the metadata for each repository.
Data type
Appstream screenshots can be images or videos, both with restricted formats. Gnome Software supports both images and videos as screenshots.
| Screenshots | Data type | Notes |
|---|---|---|
| Image | PNG [recommended], JPEG, WebP or JXL | Fedora, Debian and Flathub screenshots displayed in Gnome Software are all PNG. |
| Video | Matroska (.mkv) or WebM container and use VP9 or AV1 codec | Fedora, Debian and Flathub don't have videos in their appstream repos. |
Sources
Screenshots are sourced from the following locations:
| Template | Application Sources | Local appstream software catalog | Image URLs included |
|---|---|---|---|
| Fedora | dnf (via packagekit) | /usr/share/swcatalog/xml/ | http://dl.fedoraproject.org/pub/alt/screenshots/f43/ |
| Fedora / Debian | Gnome web apps | /usr/share/swcatalog/xml/ | urls related to each app’s website |
| Debian | apt (via packagekit) | /var/lib/swcatalog/yml/ | https://appstream.debian.org/media/trixie |
| Fedora / Debian | Flathub (3rd party Flatpak) | /var/lib/flatpak/appstream/flathub/ | https://dl.flathub.org/media/app/ |
Security Concerns
- In Fedora, screenshots are sourced from an HTTP website
- Screenshots from webapps are sourced from each project website
- Screenshots are not cryptographically signed
Security mitigations
Only a few screenshot’s security mitgations were found do be addressed by Gnome Software.
Checking screenshots type.
URL validation when downloading screenshots.
GskPixbuf loading to check if screenshots are images and are not corrupted.
Solution
A simple Gnome Software plugin was created for Qubes integrations, where the refine_async plugin function clears screenshots from each application. This way, no screenshot is downloaded and the user can see a “No Screenshots” image instead.
The image below shows what this solution looks like from the user perspective: