CVE-2026-54707
OnionShare Receive mode writes uploaded files even when file uploads are disabled
OnionShare is an open source tool that lets you securely and anonymously share files, host websites, and chat with friends using the Tor network. Prior to 2.6.4, OnionShare CLI/Desktop does not enforce the Receive mode disable_files setting in cli/onionshare_cli/web/receive_mode.py, where ReceiveModeRequest._get_file_stream() writes multipart file[] data to disk despite the text-only setting. This issue is fixed in version 2.6.4.
Attack profile
How easy it is to exploit
- Attack vector
- Network
- Complexity
- Low
- Privileges needed
- Low
- User interaction
- None
What an attacker can affect
- Confidentiality
- None
- Integrity
- Low
- Availability
- Low
Exploit likelihood
What each source reports
CVE List Score used
5.4
OnionShare Receive mode writes uploaded files even when file uploads are disabled
OnionShare is an open source tool that lets you securely and anonymously share files, host websites, and chat with friends using the Tor network. Prior to 2.6.4, OnionShare CLI/Desktop does not enforce the Receive mode disable_files setting in cli/onionshare_cli/web/receive_mode.py, where ReceiveModeRequest._get_file_stream() writes multipart file[] data to disk despite the text-only setting. This issue is fixed in version 2.6.4.
- Record
CVE-2026-54707- CVSS 3.1
- 5.4 Medium
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:L - Weakness
- CWE-863
- Updated
- 2026-11-02
EUVDEUVD-2026-51570
5.4
OnionShare is an open source tool that lets you securely and anonymously share files, host websites, and chat with friends using the Tor network. Prior to 2.6.4, OnionShare CLI/Desktop does not enforce the Receive mode disable_files setting in cli/onionshare_cli/web/receive_mode.py, where ReceiveModeRequest._get_file_stream() writes multipart file[] data to disk despite the text-only setting. This issue is fixed in version 2.6.4.
- Record
EUVD-2026-51570- CVSS 3.1
- 5.4 Medium
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:L - Updated
- 2026-11-02
GitHub AdvisoriesGHSA-v833-3823-cmhp
5.4
OnionShare Receive mode writes uploaded files even when file uploads are disabled
Summary
OnionShare CLI/Desktop 2.6.3 does not enforce the Receive mode disable_files setting at the file upload sink. When a Receive service is configured as a text-message-only endpoint (--disable-files / "Disable uploading files"), a remote sender who can reach the OnionShare service can still send a crafted multipart request containing file[]; OnionShare writes the uploaded bytes to disk before the route handler skips file accounting.
This affects the shipped onionshare-cli Python package and the desktop application because both use the same onionshare_cli.web.receive_mode request-streaming implementation.
Details
Tested repository: https://github.com/onionshare/onionshare at commit 8cc75e1d7e88bd31f7276733449d412bf71c8999.
Affected product evidence:
cli/pyproject.tomldeclaresonionshare_cliversion2.6.3.desktop/pyproject.tomldeclaresonionshareversion2.6.3and depends ononionshare_clifrom../cli.cli/setup.pypublishesonionshare-cliand includesonionshare_cli.webplus templates/static resources.desktop/setup.pypublishesonionshareand exposes bothonionshareandonionshare-cliconsole scripts.
Reachable default/common paths:
- CLI Receive mode is exposed through
--receive(cli/onionshare_cli/__init__.py:55-57). - The
--disable-filesoption is documented and stored in mode settings (cli/onionshare_cli/__init__.py:156-160,cli/onionshare_cli/__init__.py:254-261). - Desktop Receive mode exposes the same setting via the "Disable uploading files" checkbox and stores it as
receive.disable_files(desktop/onionshare/tab/mode/receive_mode/__init__.py:89-99,desktop/onionshare/tab/mode/receive_mode/__init__.py:246-254). - User documentation says "Disable uploading files" should "only allow submitting text messages, like for an anonymous contact form" (
docs/source/features.rst:64). - Advanced documentation lists
--disable-filesanddisable_filesas the option to disable receiving files (docs/source/advanced.rst:162-163,docs/source/advanced.rst:455).
Root cause:
- The Receive template hides the file input when
disable_filesis set (cli/onionshare_cli/resources/templates/receive.html:51-56), but this is only UI-side. - The
/uploadroute skipsrequest.files.getlist("file[]")and file accounting whendisable_filesis enabled (cli/onionshare_cli/web/receive_mode.py:96-135). However, by this point Werkzeug has already parsed the multipart body and invoked the custom stream factory. ReceiveModeRequest.__init__()treats everyPOST /uploadorPOST /upload-ajaxas an upload request and creates a receive directory regardless ofdisable_files(cli/onionshare_cli/web/receive_mode.py:369-391).ReceiveModeRequest._get_file_stream()creates a writableReceiveModeFilefor each uploaded part without checkingself.web.settings.get("receive", "disable_files")(cli/onionshare_cli/web/receive_mode.py:517-540).ReceiveModeFileopens<receive_mode_dir>/<secure_filename>.part, writes attacker-controlled bytes, then renames the.partfile to the final filename (cli/onionshare_cli/web/receive_mode.py:272-285,cli/onionshare_cli/web/receive_mode.py:320-346).
False-positive screening performed:
secure_filename()is used atcli/onionshare_cli/web/receive_mode.py:111-113andcli/onionshare_cli/web/receive_mode.py:527-528, so the confirmed issue is not path traversal; the file is written under the configured receive data directory.- The UI hiding the file input is bypassable by direct multipart POST.
- Route-level
if not disable_filesonly affects later accounting/status/webhook behavior; it does not prevent the stream sink from creating and writing the file. - Default non-public onion services require the sender to know the onion address and private key unless the user opts into public mode. This limits exposure but does not enforce the user-selected "text only" security policy for authorized senders or…
- Record
GHSA-v833-3823-cmhp- CVSS 3.1
- 5.4 Medium
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:L - Weakness
- CWE-863
- Updated
- 2026-11-02
NVD
5.4
OnionShare is an open source tool that lets you securely and anonymously share files, host websites, and chat with friends using the Tor network. Prior to 2.6.4, OnionShare CLI/Desktop does not enforce the Receive mode disable_files setting in cli/onionshare_cli/web/receive_mode.py, where ReceiveModeRequest._get_file_stream() writes multipart file[] data to disk despite the text-only setting. This issue is fixed in version 2.6.4.
- Record
CVE-2026-54707- CVSS 3.1
- 5.4 Medium
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:L - Weakness
- CWE-863
- Updated
- 2026-11-02
OSV
5.4
OnionShare Receive mode writes uploaded files even when file uploads are disabled
OnionShare is an open source tool that lets you securely and anonymously share files, host websites, and chat with friends using the Tor network. Prior to 2.6.4, OnionShare CLI/Desktop does not enforce the Receive mode disable_files setting in cli/onionshare_cli/web/receive_mode.py, where ReceiveModeRequest._get_file_stream() writes multipart file[] data to disk despite the text-only setting. This issue is fixed in version 2.6.4.
- Record
CVE-2026-54707- CVSS 3.1
- 5.4 Medium
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:L - Weakness
- CWE-863
- Updated
- 2026-11-02
OSVDEBIAN-CVE-2026-54707
5.4
OnionShare is an open source tool that lets you securely and anonymously share files, host websites, and chat with friends using the Tor network. Prior to 2.6.4, OnionShare CLI/Desktop does not enforce the Receive mode disable_files setting in cli/onionshare_cli/web/receive_mode.py, where ReceiveModeRequest._get_file_stream() writes multipart file[] data to disk despite the text-only setting. This issue is fixed in version 2.6.4.
- Record
DEBIAN-CVE-2026-54707- CVSS 3.1
- 5.4 Medium
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:L - Updated
- 2026-11-02
Show 4 moreShow less
OSVGHSA-v833-3823-cmhp
5.4
OnionShare Receive mode writes uploaded files even when file uploads are disabled
Summary
OnionShare CLI/Desktop 2.6.3 does not enforce the Receive mode disable_files setting at the file upload sink. When a Receive service is configured as a text-message-only endpoint (--disable-files / "Disable uploading files"), a remote sender who can reach the OnionShare service can still send a crafted multipart request containing file[]; OnionShare writes the uploaded bytes to disk before the route handler skips file accounting.
This affects the shipped onionshare-cli Python package and the desktop application because both use the same onionshare_cli.web.receive_mode request-streaming implementation.
Details
Tested repository: https://github.com/onionshare/onionshare at commit 8cc75e1d7e88bd31f7276733449d412bf71c8999.
Affected product evidence:
cli/pyproject.tomldeclaresonionshare_cliversion2.6.3.desktop/pyproject.tomldeclaresonionshareversion2.6.3and depends ononionshare_clifrom../cli.cli/setup.pypublishesonionshare-cliand includesonionshare_cli.webplus templates/static resources.desktop/setup.pypublishesonionshareand exposes bothonionshareandonionshare-cliconsole scripts.
Reachable default/common paths:
- CLI Receive mode is exposed through
--receive(cli/onionshare_cli/__init__.py:55-57). - The
--disable-filesoption is documented and stored in mode settings (cli/onionshare_cli/__init__.py:156-160,cli/onionshare_cli/__init__.py:254-261). - Desktop Receive mode exposes the same setting via the "Disable uploading files" checkbox and stores it as
receive.disable_files(desktop/onionshare/tab/mode/receive_mode/__init__.py:89-99,desktop/onionshare/tab/mode/receive_mode/__init__.py:246-254). - User documentation says "Disable uploading files" should "only allow submitting text messages, like for an anonymous contact form" (
docs/source/features.rst:64). - Advanced documentation lists
--disable-filesanddisable_filesas the option to disable receiving files (docs/source/advanced.rst:162-163,docs/source/advanced.rst:455).
Root cause:
- The Receive template hides the file input when
disable_filesis set (cli/onionshare_cli/resources/templates/receive.html:51-56), but this is only UI-side. - The
/uploadroute skipsrequest.files.getlist("file[]")and file accounting whendisable_filesis enabled (cli/onionshare_cli/web/receive_mode.py:96-135). However, by this point Werkzeug has already parsed the multipart body and invoked the custom stream factory. ReceiveModeRequest.__init__()treats everyPOST /uploadorPOST /upload-ajaxas an upload request and creates a receive directory regardless ofdisable_files(cli/onionshare_cli/web/receive_mode.py:369-391).ReceiveModeRequest._get_file_stream()creates a writableReceiveModeFilefor each uploaded part without checkingself.web.settings.get("receive", "disable_files")(cli/onionshare_cli/web/receive_mode.py:517-540).ReceiveModeFileopens<receive_mode_dir>/<secure_filename>.part, writes attacker-controlled bytes, then renames the.partfile to the final filename (cli/onionshare_cli/web/receive_mode.py:272-285,cli/onionshare_cli/web/receive_mode.py:320-346).
False-positive screening performed:
secure_filename()is used atcli/onionshare_cli/web/receive_mode.py:111-113andcli/onionshare_cli/web/receive_mode.py:527-528, so the confirmed issue is not path traversal; the file is written under the configured receive data directory.- The UI hiding the file input is bypassable by direct multipart POST.
- Route-level
if not disable_filesonly affects later accounting/status/webhook behavior; it does not prevent the stream sink from creating and writing the file. - Default non-public onion services require the sender to know the onion address and private key unless the user opts into public mode. This limits exposure but does not enforce the user-selected "text only" security policy for authorized senders or…
- Record
GHSA-v833-3823-cmhp- CVSS 3.1
- 5.4 Medium
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:L - Weakness
- CWE-863
- Updated
- 2026-11-02
OSVPYSEC-2026-3586
5.4
OnionShare Receive mode writes uploaded files even when file uploads are disabled
Summary
OnionShare CLI/Desktop 2.6.3 does not enforce the Receive mode disable_files setting at the file upload sink. When a Receive service is configured as a text-message-only endpoint (--disable-files / "Disable uploading files"), a remote sender who can reach the OnionShare service can still send a crafted multipart request containing file[]; OnionShare writes the uploaded bytes to disk before the route handler skips file accounting.
This affects the shipped onionshare-cli Python package and the desktop application because both use the same onionshare_cli.web.receive_mode request-streaming implementation.
Details
Tested repository: https://github.com/onionshare/onionshare at commit 8cc75e1d7e88bd31f7276733449d412bf71c8999.
Affected product evidence:
cli/pyproject.tomldeclaresonionshare_cliversion2.6.3.desktop/pyproject.tomldeclaresonionshareversion2.6.3and depends ononionshare_clifrom../cli.cli/setup.pypublishesonionshare-cliand includesonionshare_cli.webplus templates/static resources.desktop/setup.pypublishesonionshareand exposes bothonionshareandonionshare-cliconsole scripts.
Reachable default/common paths:
- CLI Receive mode is exposed through
--receive(cli/onionshare_cli/__init__.py:55-57). - The
--disable-filesoption is documented and stored in mode settings (cli/onionshare_cli/__init__.py:156-160,cli/onionshare_cli/__init__.py:254-261). - Desktop Receive mode exposes the same setting via the "Disable uploading files" checkbox and stores it as
receive.disable_files(desktop/onionshare/tab/mode/receive_mode/__init__.py:89-99,desktop/onionshare/tab/mode/receive_mode/__init__.py:246-254). - User documentation says "Disable uploading files" should "only allow submitting text messages, like for an anonymous contact form" (
docs/source/features.rst:64). - Advanced documentation lists
--disable-filesanddisable_filesas the option to disable receiving files (docs/source/advanced.rst:162-163,docs/source/advanced.rst:455).
Root cause:
- The Receive template hides the file input when
disable_filesis set (cli/onionshare_cli/resources/templates/receive.html:51-56), but this is only UI-side. - The
/uploadroute skipsrequest.files.getlist("file[]")and file accounting whendisable_filesis enabled (cli/onionshare_cli/web/receive_mode.py:96-135). However, by this point Werkzeug has already parsed the multipart body and invoked the custom stream factory. ReceiveModeRequest.__init__()treats everyPOST /uploadorPOST /upload-ajaxas an upload request and creates a receive directory regardless ofdisable_files(cli/onionshare_cli/web/receive_mode.py:369-391).ReceiveModeRequest._get_file_stream()creates a writableReceiveModeFilefor each uploaded part without checkingself.web.settings.get("receive", "disable_files")(cli/onionshare_cli/web/receive_mode.py:517-540).ReceiveModeFileopens<receive_mode_dir>/<secure_filename>.part, writes attacker-controlled bytes, then renames the.partfile to the final filename (cli/onionshare_cli/web/receive_mode.py:272-285,cli/onionshare_cli/web/receive_mode.py:320-346).
False-positive screening performed:
secure_filename()is used atcli/onionshare_cli/web/receive_mode.py:111-113andcli/onionshare_cli/web/receive_mode.py:527-528, so the confirmed issue is not path traversal; the file is written under the configured receive data directory.- The UI hiding the file input is bypassable by direct multipart POST.
- Route-level
if not disable_filesonly affects later accounting/status/webhook behavior; it does not prevent the stream sink from creating and writing the file. - Default non-public onion services require the sender to know the onion address and private key unless the user opts into public mode. This limits exposure but does not enforce the user-selected "text only" security policy for authorized senders or…
- Record
PYSEC-2026-3586- CVSS 3.1
- 5.4 Medium
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:L - Updated
- 2026-11-02
OSVUBUNTU-CVE-2026-54707
5.4
OnionShare is an open source tool that lets you securely and anonymously share files, host websites, and chat with friends using the Tor network. Prior to 2.6.4, OnionShare CLI/Desktop does not enforce the Receive mode disable_files setting in cli/onionshare_cli/web/receive_mode.py, where ReceiveModeRequest._get_file_stream() writes multipart file[] data to disk despite the text-only setting. This issue is fixed in version 2.6.4.
- Record
UBUNTU-CVE-2026-54707- CVSS 3.1
- 5.4 Medium
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:L - Updated
- 2026-11-02
OSVopenSUSE-SU-2026:11169-1 No score
python3-onionshare-2.6.4-1.1 on GA media
These are all security issues fixed in the python3-onionshare-2.6.4-1.1 package on the GA media of openSUSE Tumbleweed.
- Record
openSUSE-SU-2026:11169-1- Updated
- 2026-11-02
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
onionshare-cliPyPI |
before 2.6.4 | 2.6.4 |
onionshareDebian:12 |
All versions, plus listed versions 2.6-42.6-52.6-5~deb12u12.6-62.6-7 Show 11 moreShow less2.6.2-12.6.2-22.6.2-32.6.2-42.6.2-52.6.3-12.6.3-22.6.3-32.6.3-42.6.4-12.6.4-2 |
None known |
onionshareDebian:13 |
before 2.6.3-1+deb13u2, plus listed versions 2.6.3-1 |
2.6.3-1+deb13u2 |
onionshareDebian:14 |
before 2.6.4-1, plus listed versions 2.6.3-12.6.3-22.6.3-32.6.3-4 |
2.6.4-1 |
onionshare-cliPyPI |
before 2.6.4, plus listed versions 2.32.3.12.3.22.3.32.52.62.6.12.6.3 |
2.6.4 |
onionshareUbuntu:Pro:16.04:LTS |
All versions, plus listed versions 0.7-10.7.1-10.8.1-10.8.1-1ubuntu0.1~esm1 |
None known |
onionshareUbuntu:Pro:18.04:LTS |
All versions, plus listed versions 0.9.2-10.9.2-1ubuntu0.1~esm1 |
None known |
onionshareUbuntu:Pro:20.04:LTS |
All versions, plus listed versions 2.1-12.2-12.2-1ubuntu0.1~esm1 |
None known |
onionshareUbuntu:Pro:22.04:LTS |
All versions, plus listed versions 2.2-32.2-3ubuntu0.1~esm1 |
None known |
onionshareUbuntu:24.04:LTS |
All versions, plus listed versions 2.6-52.6-6ubuntu12.6-6ubuntu1.1 |
None known |
onionshareUbuntu:26.04:LTS |
All versions, plus listed versions 2.6.3-12.6.3-1build12.6.3-3 |
None known |
python-onionshareopenSUSE:Tumbleweed From an advisory covering 2 CVEs |
before 2.6.4-1.1 | 2.6.4-1.1 |
History
| Recorded | Changed | Sources |
|---|---|---|
| affected, facts | ||
| first indexed | CVE List, EUVD, GitHub Advisories, NVD, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2026-54707 is a medium vulnerability (CVSS 5.4) in Onionshare, published July 1, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.40%, the 34th percentile. Fixed in onionshare-cli 2.6.4.
References
github.com/onionshare/onionshare/security/advisories/GHSA-v833-3823-cmhp
github.com/onionshare/onionshare/commit/a090e97193efc91fbeac9dace7793ea568b83cf5
github.com/onionshare/onionshare/releases/tag/v2.6.4
github.com/advisories/GHSA-v833-3823-cmhp
github.com/CVEProject/cvelistV5/tree/main/cves/2026/54xxx/CVE-2026-54707.json
nvd.nist.gov/vuln/detail/CVE-2026-54707
Left out here: the rest of 3 source descriptions. The JSON record has them.