Please report privately through GitHub: Security → Report a vulnerability.
Don't open a public issue for anything exploitable. Private reports go straight to the maintainer, stay unlisted until there's a fix, and can be turned into a published advisory afterwards.
Include what you have — a reproducer, the affected version (clippy status or
dpkg -l clippy), your desktop environment and compositor. Expect a first
response within about a week; this is a single-maintainer project, so please be
patient rather than escalating publicly.
Only the latest release is supported. Fixes ship as a new version rather than as patches to older ones — see Releases.
Worth being explicit, because it shapes what counts as a vulnerability here.
Your clipboard history is sensitive by nature, and it is not encrypted at
rest. Anything you copy — passwords out of a password manager, tokens, private
keys — is written to ~/.local/share/clippy/history.db in plain text, along with
images and copied files under the same directory. This is inherent to what a
clipboard manager is, not a defect, but it means:
- The database is only as protected as your user account and home directory.
- Retention matters: Settings → History retention bounds how long a copied secret survives, and Clear history removes it now. Pinned items are kept until unpinned.
- Full-disk encryption is the right mitigation for the at-rest case.
If you'd rather a class of content were never recorded, that's a reasonable feature request — open an issue.
These are the parts where a report is most likely to be a real vulnerability:
- LAN clipboard sync (opt-in, off by default). Pairing uses a SPAKE2
password-authenticated key exchange keyed by the shown 6-digit code: neither
side transmits the code or anything derived from it that an eavesdropper could
offline-crack, and a wrong code cannot complete the handshake. Guessing is
online-only and capped per pairing window. Paired peers are thereafter
authenticated by long-term X25519 identity keys and traffic is encrypted with
NaCl. The private key lives at
~/.local/share/clippy/identity.key(0600) and trusted peers inpeers.json(0600). Pairing, key handling, replay, and anything that lets an unpaired device read or inject clipboard content are all in scope. - The IPC control socket in
$XDG_RUNTIME_DIR(0600). It accepts commands that can read and set the clipboard, so anything that widens access to it, or gets a command executed that shouldn't be, is in scope. - The in-app updater. Settings → Check for updates fetches release
metadata from the GitHub API over HTTPS and installs the downloaded
.debas root viapkexec. Integrity rests on TLS to GitHub and on PolicyKit prompting you; the package is not independently signature-checked by Clippy. Anything that could redirect, substitute, or tamper with what gets installed is a serious report. On Debian/Ubuntu, installing from the APT repository instead meansaptverifies the repo's GPG signature, which is the stronger path. - The X11/XWayland selection owner. Clippy runs a helper that owns the X11
CLIPBOARDselection and serves clip contents to requesting clients — by design, since that is how clips reach XWayland apps. Ways to make it serve something it shouldn't, or to a client that shouldn't get it, are in scope. - Copied file handling. Recovering a file stages a copy under
~/.local/share/clippy/paste/; path traversal or symlink issues there are in scope.
- Clipboard contents being readable by other processes in your session. On both Wayland and X11 the clipboard is session-wide by design; any app you run can read it. That's the platform, not Clippy.
- The plaintext history database, as described above — unless you've found a way for something outside your user account to reach it.
- Compositor and toolkit bugs. Clipboard behaviour on Wayland depends heavily
on the compositor, and some misbehaviour originates there — see
docs/cosmic-comp-clipboard-bug.mdfor a worked example. Reports are still welcome; they may be redirected upstream. - Anything requiring an attacker who already has your user account or root.