History log of /dokuwiki/_test/tests/lib/exe/ajax_requests.test.php (Results 1 – 6 of 6)
Revision Date Author Comments
# 5d8c9d42 06-Jun-2026 Andreas Gohr <andi@splitbrain.org>

(security) Require a security token for the lock AJAX call

The lock AJAX call refreshes the edit lock and saves a draft, both of
which change server state. It was gated only by the write ACL and,
un

(security) Require a security token for the lock AJAX call

The lock AJAX call refreshes the edit lock and saves a draft, both of
which change server state. It was gated only by the write ACL and,
unlike the sibling draft-delete call, did not verify a security token
(low severity).

A cross-site forged POST against a logged-in user could, within that
user's own write permissions, take or hold an edit lock and store
attacker-controlled draft content under their name.

The call now verifies the security token before taking the lock or
saving the draft. Logged out users are unaffected, as no token is
issued or checked for them. The edit lock timer now always sends the
token with its refresh request, including when draft saving is
disabled.

show more ...


# e8c9256a 06-Jun-2026 Andreas Gohr <andi@splitbrain.org>

(security) Clean the media upload namespace in AJAX upload

The namespace passed to the AJAX backend was not cleaned correctly,
resulting in two separate issues.

1. Theoretical Reflected XSS
The

(security) Clean the media upload namespace in AJAX upload

The namespace passed to the AJAX backend was not cleaned correctly,
resulting in two separate issues.

1. Theoretical Reflected XSS
The raw namespace was reflected into the JSON response and injected
into the mediamanager DOM. However since the media manager only
passes cleaned namespaces to AJAX and the ajax backen only returns
JSON, this issue was not exploitable.
2. Cross-namespace ACL bypass (medium severity)
The uncleaned namespace was directly used to check ACLs. In a wiki
where a user has upload permission in a namespace above a namespace
where they don't have permissions (eg. upload allowed in :user:*, but
upload denied in :user:secret:*) they could pass an upper case
namespace (eg :user:SECRET) - no ACL does exist for this upper case
namespace and the acl of the namespace above applies (:user).
When the file is written a cleanID is applied to the full filename,
turning the uppercase namespace into lowercase.
This can allow users to write into a namespace they normally should
not be allowed to write to, but it does require upload permissions in
a higher namespace.

show more ...


# 9ad2b913 25-Nov-2024 Andreas Gohr <andi@splitbrain.org>

replace deprecated phpunit assertions


# 7eed8b73 29-Aug-2017 Andreas Gohr <andi@splitbrain.org>

adjusted the tests


# f0cc02d3 28-Jul-2017 Yurii K <yurii-github@users.noreply.github.com>

cleaning


# 814e20b8 28-Jul-2017 Yurii K <yurii-github@users.noreply.github.com>

extracted functions
added test coverage