Publish CVE-2023-45725
diff --git a/src/docs/src/cve/2023-45725.rst b/src/docs/src/cve/2023-45725.rst
new file mode 100644
index 0000000..bf9dd65
--- /dev/null
+++ b/src/docs/src/cve/2023-45725.rst
@@ -0,0 +1,105 @@
+.. Licensed under the Apache License, Version 2.0 (the "License"); you may not
+.. use this file except in compliance with the License. You may obtain a copy of
+.. the License at
+..
+.. http://www.apache.org/licenses/LICENSE-2.0
+..
+.. Unless required by applicable law or agreed to in writing, software
+.. distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+.. WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+.. License for the specific language governing permissions and limitations under
+.. the License.
+
+.. _cve/2023-45725:
+
+===========================================================================
+CVE-2023-45725: Apache CouchDB: Privilege Escalation Using Design Documents
+===========================================================================
+
+:Date: 12.12.2023
+
+:Affected: 3.3.2 and below
+
+:Severity: Medium
+
+:Vendor: The Apache Software Foundation
+
+Description
+===========
+
+Design document functions which receive a user http request object may expose
+authorization or session cookie headers of the user who accesses the document.
+
+These design document functions are:
+ * list
+ * show
+ * rewrite
+ * update
+
+An attacker can leak the session component using an HTML-like output, insert
+the session as an external resource (such as an image), or store the credential
+in a ``_local`` document with an "update" function.
+
+For the attack to succeed the attacker has to be able to insert the design
+documents into the database, then manipulate a user to access a function from
+that design document.
+
+Mitigation
+==========
+
+CouchDB :ref:`3.3.3 <release/3.3.3>` scrubs the sentive headers from http
+request objects passed to the query server execution environment.
+
+For versions older than :ref:`3.3.3 <release/3.3.3>` this patch applied to the
+``loop.js`` file would also mitigate the issue:
+
+.. code-block:: diff
+
+ diff --git a/share/server/loop.js b/share/server/loop.js
+ --- a/share/server/loop.js
+ +++ b/share/server/loop.js
+ @@ -49,6 +49,20 @@ function create_nouveau_sandbox() {
+ return sandbox;
+ }
+
+ +function scrubReq(args) {
+ + var req = args.pop()
+ + if (req.method && req.headers && req.peer && req.userCtx) {
+ + delete req.cookie
+ + for (var p in req.headers) {
+ + if (req.headers.hasOwnProperty(p) && ["authorization", "cookie"].indexOf(p.toLowerCase()) !== -1) {
+ + delete req.headers[p]
+ + }
+ + }
+ + }
+ + args.push(req)
+ + return args
+ +}
+ +
+ // Commands are in the form of json arrays:
+ // ["commandname",..optional args...]\n
+ //
+ @@ -85,7 +99,7 @@ var DDoc = (function() {
+ var funPath = args.shift();
+ var cmd = funPath[0];
+ // the first member of the fun path determines the type of operation
+ - var funArgs = args.shift();
+ + var funArgs = scrubReq(args.shift());
+ if (ddoc_dispatch[cmd]) {
+ // get the function, call the command with it
+ var point = ddoc;
+
+Workarounds
+===========
+
+Avoid using design documents from untrusted sources which may attempt to access
+or manipulate request object's headers.
+
+Credit
+======
+
+This issue was found by Natan Nehorai and reported by Or Peles from the JFrog
+Vulnerability Research Team.
+
+It was also independently found by Richard Ellis and Mike Rhodes from
+IBM/Cloudant.