fix(page): exclude archived content from page render and content save (#35993)#36215
fix(page): exclude archived content from page render and content save (#35993)#36215dsolistorres wants to merge 8 commits into
Conversation
|
Semgrep found 3
Risk: Affected versions of js-yaml are vulnerable to Improperly Controlled Modification of Object Prototype Attributes ('Prototype Pollution'). js-yaml is vulnerable to prototype pollution through its YAML merge key ( Manual Review Advice: A vulnerability from this advisory is reachable if you are using Fix: Upgrade this library to at least version 4.1.1 at core/e2e/dotcms-e2e-node/frontend/yarn.lock:709. Reference(s): GHSA-mh29-5h37-fv8m, CVE-2025-64718 If this is a critical or high severity finding, please also link this issue in the #security channel in Slack. Semgrep found 1 Risk: Affected versions of webpack are vulnerable to Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting'). webpack's AutoPublicPathRuntimeModule emits runtime code that derives the asset public path from document.currentScript. Because document.currentScript can be DOM-clobbered by an injected scriptless element (e.g. Manual Review Advice: A vulnerability from this advisory is reachable if you build with output.publicPath unset Fix: Upgrade this library to at least version 5.94.0 at core/core-web/pnpm-lock.yaml:14501. Reference(s): GHSA-4vvj-4cpr-p986, CVE-2024-43788 If this is a critical or high severity finding, please also link this issue in the #security channel in Slack. Semgrep found 2 Risk: Affected versions of next are vulnerable to Improper Input Validation. Next.js Image Optimization ( Manual Review Advice: A vulnerability from this advisory is reachable if you are using next/image and either Fix: Upgrade this library to at least version 14.2.31 at core/core-web/pnpm-lock.yaml:11425. Reference(s): GHSA-xv57-4mr9-wg8v, CVE-2025-55173 If this is a critical or high severity finding, please also link this issue in the #security channel in Slack. Semgrep found 2 Risk: Affected versions of next are vulnerable to Allocation of Resources Without Limits or Throttling. An attacker can send a Server Action request with an abruptly closed connection or invalid Content-Length header, causing the internal React Flight Reply decoder to create perpetually-pending promise chunks that never resolve. This leaves the server connection hanging indefinitely until the hosting provider times out execution, resulting in a denial of service. Manual Review Advice: A vulnerability from this advisory is reachable if you use Server Actions ("use server") without enforcing request timeouts or connection termination Fix: Upgrade this library to at least version 14.2.21 at core/core-web/pnpm-lock.yaml:11425. Reference(s): GHSA-7m27-7ghc-44w9, CVE-2024-56332 If this is a critical or high severity finding, please also link this issue in the #security channel in Slack. Semgrep found 1 Risk: Affected versions of next are vulnerable to Uncontrolled Recursion. An attacker can send a crafted HTTP request to the built-in Next.js image optimization endpoint ( Manual Review Advice: A vulnerability from this advisory is reachable if you have default image optimization configured on non Vercel hosting Fix: Upgrade this library to at least version 14.2.7 at core/core-web/pnpm-lock.yaml:11425. Reference(s): GHSA-g77x-44xx-532m, CVE-2024-47831 If this is a critical or high severity finding, please also link this issue in the #security channel in Slack. Semgrep found 1 Risk: Affected versions of axios are vulnerable to Improper Neutralization of CRLF Sequences in HTTP Headers ('HTTP Request/Response Splitting') / Inconsistent Interpretation of HTTP Requests ('HTTP Request/Response Smuggling') / Server-Side Request Forgery (SSRF). Axios can be used as a gadget for header injection: if another dependency enables prototype pollution, polluted properties can be merged into Axios request headers and written without CRLF sanitization, allowing request smuggling/SSRF that can reach internal services such as AWS IMDSv2 and potentially lead to credential theft or broader compromise. Fix: Upgrade this library to at least version 1.15.0 at core/core-web/pnpm-lock.yaml:7566. Reference(s): GHSA-fvcv-3m26-pcqx, CVE-2026-40175 If this is a critical or high severity finding, please also link this issue in the #security channel in Slack. Semgrep found 1 Risk: Affected versions of axios are vulnerable to Server-Side Request Forgery (SSRF) / Unintended Proxy or Intermediary ('Confused Deputy'). Axios does not normalize hostnames before applying Manual Review Advice: A vulnerability from this advisory is reachable if you have Fix: Upgrade this library to at least version 1.15.0 at core/core-web/pnpm-lock.yaml:7566. Reference(s): GHSA-3p68-rc4w-qgx5, CVE-2025-62718 If this is a critical or high severity finding, please also link this issue in the #security channel in Slack. Semgrep found 1 Risk: Affected versions of next are vulnerable to Improper Input Validation. Next.js Image Optimization ( Fix: Upgrade this library to at least version 14.2.31 at core/starter/nextjs/package-lock.json:3428. Reference(s): GHSA-xv57-4mr9-wg8v, CVE-2025-55173 If this is a critical or high severity finding, please also link this issue in the #security channel in Slack. Semgrep found 2 Risk: Affected versions of vite and vite-plus are vulnerable to Exposure of Sensitive Information to an Unauthorized Actor / Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal'). Vite's server.fs.deny blocklist—which protects sensitive files such as .env and certificate files from being served—can be bypassed on Windows using alternate path representations (NTFS Alternate Data Stream syntax like Manual Review Advice: A vulnerability from this advisory is reachable if you expose the Vite dev server or vite-plus to the network by configuring a non-loopback address using the --host CLI flag on Windows Fix: Upgrade this library to at least version 7.3.5 at core/core-web/pnpm-lock.yaml:14268. Reference(s): GHSA-fx2h-pf6j-xcff If this is a critical or high severity finding, please also link this issue in the #security channel in Slack. Semgrep found 7
Risk: Affected versions of esbuild are vulnerable to Download of Code Without Integrity Check / Untrusted Search Path. esbuild's Deno distribution module ( Manual Review Advice: A vulnerability from this advisory is reachable if you invoke the esbuild Deno module directly as a CLI tool (e.g. Fix: Upgrade this library to at least version 0.28.1 at core/core-web/pnpm-lock.yaml:9047. Reference(s): GHSA-gv7w-rqvm-qjhr If this is a critical or high severity finding, please also link this issue in the #security channel in Slack. Semgrep found 2 Risk: Affected versions of axios are vulnerable to Inefficient Regular Expression Complexity / Uncontrolled Resource Consumption. axios is vulnerable to a regular expression denial of service (ReDoS). The internal Manual Review Advice: A vulnerability from this advisory is reachable if you are using axios in browser with untrusted Fix: Upgrade this library to at least version 1.16.0 at core/core-web/pnpm-lock.yaml:7569. Reference(s): GHSA-hfxv-24rg-xrqf If this is a critical or high severity finding, please also link this issue in the #security channel in Slack. Semgrep found 2 Risk: Affected versions of axios are vulnerable to Improperly Controlled Modification of Object Prototype Attributes ('Prototype Pollution') / Unintended Proxy or Intermediary ('Confused Deputy'). axios reads Manual Review Advice: A vulnerability from this advisory is reachable if you use axios to make HTTP requests Fix: Upgrade this library to at least version 1.16.0 at core/core-web/pnpm-lock.yaml:7569. Reference(s): GHSA-35jp-ww65-95wh, GHSA-fvcv-3m26-pcqx, CVE-2026-44494 If this is a critical or high severity finding, please also link this issue in the #security channel in Slack. Semgrep found 2 Risk: Affected versions of next are vulnerable to Allocation of Resources Without Limits or Throttling. An attacker can send a specially crafted HTTP request to any Next.js App Router Server Function endpoint that, when deserialized by the underlying React Server Components (Flight) runtime, triggers excessive CPU usage—exhausting the server process and resulting in a denial-of-service. The vulnerable deserialization path is part of the App Router's HTTP route handler, so any Next.js application that uses the App Router is reachable without any explicit Server Action declared in user code. Manual Review Advice: A vulnerability from this advisory is reachable if you are using the App Router Fix: Upgrade this library to at least version 15.5.16 at core/core-web/pnpm-lock.yaml:11425. Reference(s): GHSA-8h8q-6873-q5fj, CVE-2026-23870 If this is a critical or high severity finding, please also link this issue in the #security channel in Slack. Semgrep found 2 Risk: Affected versions of next are vulnerable to Server-Side Request Forgery (SSRF). Next.js's standalone router-server forwards WebSocket Manual Review Advice: A vulnerability from this advisory is reachable if you self-host Next.js application instead of Vercel-hosted deployments Fix: Upgrade this library to at least version 15.5.16 at core/core-web/pnpm-lock.yaml:11425. Reference(s): GHSA-c4j6-fc7j-m34r, CVE-2026-44578 If this is a critical or high severity finding, please also link this issue in the #security channel in Slack. Semgrep found 1 Risk: Affected versions of @babel/plugin-transform-modules-systemjs are vulnerable to Access of Resource Using Incompatible Type ('Type Confusion') / Improper Control of Generation of Code ('Code Injection'). @babel/plugin-transform-modules-systemjs mishandles module string specifiers when compiling code into SystemJS module form. An attacker who can supply specially crafted source code to a Babel build that uses this plugin (directly, or transitively via @babel/preset-env configured with Manual Review Advice: A vulnerability from this advisory is reachable if you install Fix: Upgrade this library to at least version 7.29.4 at core/core-web/pnpm-lock.yaml:1664. Reference(s): GHSA-fv7c-fp4j-7gwp, CVE-2026-44728 If this is a critical or high severity finding, please also link this issue in the #security channel in Slack. Semgrep found 2 Risk: Affected versions of next are vulnerable to Allocation of Resources Without Limits or Throttling. A specially crafted HTTP request to a Next.js App Router Server Function endpoint can trigger excessive CPU consumption during React Server Components deserialization, leading to denial of service. Fix: Upgrade this library to at least version 15.5.15 at core/core-web/pnpm-lock.yaml:11425. Reference(s): GHSA-q4gf-8mx6-v5v3 If this is a critical or high severity finding, please also link this issue in the #security channel in Slack. Semgrep found 1 Risk: Affected versions of vite are vulnerable to Exposure of Sensitive Information to an Unauthorized Actor / Missing Authentication for Critical Function. This occurs because the Vite Dev Server WebSocket improperly exposes the fetchModule method, allowing unauthenticated remote attackers to bypass filesystem restrictions and read arbitrary files from the host machine Manual Review Advice: A vulnerability from this advisory is reachable if you enable vite dev server using Fix: Upgrade this library to at least version 7.3.2 at core/core-web/pnpm-lock.yaml:14228. Reference(s): GHSA-p9ff-h696-f583, CVE-2026-39363 If this is a critical or high severity finding, please also link this issue in the #security channel in Slack. Semgrep found 1 Risk: Affected versions of vite are vulnerable to Improper Access Control / Incorrect Behavior Order. Vite's dev server can bypass Manual Review Advice: A vulnerability from this advisory is reachable if you enable vite dev server using Fix: Upgrade this library to at least version 7.3.2 at core/core-web/pnpm-lock.yaml:14228. Reference(s): GHSA-v2wj-q39q-566r, CVE-2026-39364 If this is a critical or high severity finding, please also link this issue in the #security channel in Slack. Semgrep found 2
Risk: Affected versions of handlebars are vulnerable to Improper Control of Generation of Code ('Code Injection') / Improper Encoding or Escaping of Output / Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting'). The Handlebars CLI precompiler allows arbitrary JavaScript injection by embedding unescaped template filenames and CLI option values such as Manual Review Advice: A vulnerability from this advisory is reachable if you execute templates through the Handlebars CLI precompiler Fix: Upgrade this library to at least version 4.7.9 at core/dotcms-postman/pnpm-lock.yaml:197. Reference(s): GHSA-xjpj-3mr7-gcpf, CVE-2026-33941 If this is a critical or high severity finding, please also link this issue in the #security channel in Slack. Semgrep found 1 Risk: Affected versions of rollup are vulnerable to Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal'). Rollup is vulnerable to arbitrary file write via path traversal: chunk/asset names derived from user-controlled inputs (e.g., CLI named inputs, manual chunk aliases, or malicious plugins) are insufficiently sanitized, allowing Manual Review Advice: A vulnerability from this advisory is reachable if you are running Fix: Upgrade this library to at least version 4.59.0 at core/core-web/pnpm-lock.yaml:12935. Reference(s): GHSA-mw96-cpmx-2vgc, CVE-2026-27606 If this is a critical or high severity finding, please also link this issue in the #security channel in Slack. Semgrep found 2 Risk: Affected versions of next are vulnerable to Deserialization of Untrusted Data / Uncontrolled Resource Consumption. A flaw in React Server Components' deserialization allows an attacker to send a specially crafted HTTP request to any App Router Server Function endpoint in Next.js, triggering excessive CPU usage, out-of-memory conditions, or a server crash and resulting in a denial of service. Fix: Upgrade this library to at least version 15.0.8 at core/core-web/pnpm-lock.yaml:11425. Reference(s): GHSA-h25m-26qc-wcjf, CVE-2026-23864 If this is a critical or high severity finding, please also link this issue in the #security channel in Slack. Semgrep found 2 Risk: Affected versions of next are vulnerable to Dependency on Vulnerable Third-Party Component / Deserialization of Untrusted Data / Uncontrolled Resource Consumption. An attacker can send a specially crafted HTTP request to any Server Function endpoint (as used by Next.js' App Router) that, when deserialized by the React Server Components runtime, enters an infinite loop—hanging the server process, exhausting CPU, and resulting in a denial-of-service. Fix: Upgrade this library to at least version 14.2.35 at core/core-web/pnpm-lock.yaml:11425. Reference(s): GHSA-5j59-xgg2-r9c4, CVE-2025-67779 If this is a critical or high severity finding, please also link this issue in the #security channel in Slack. Semgrep found 2 Risk: Affected versions of next are vulnerable to Dependency on Vulnerable Third-Party Component / Deserialization of Untrusted Data / Uncontrolled Resource Consumption. A flaw in Next.js's App Router deserialization allows an attacker to send a specially crafted HTTP request body that, when parsed by the server, triggers excessive CPU work or an infinite loop. By targeting any App Router endpoint with this malicious payload, the server process can hang and become unresponsive, resulting in a denial-of-service. Fix: Upgrade this library to at least version 14.2.34 at core/core-web/pnpm-lock.yaml:11425. Reference(s): GHSA-mwv6-3258-q52c If this is a critical or high severity finding, please also link this issue in the #security channel in Slack. Semgrep found 2
Risk: Affected versions of playwright are vulnerable to Improper Verification of Cryptographic Signature. The macOS browser reinstall scripts in Playwright use Fix: Upgrade this library to at least version 1.55.1 at core/e2e/dotcms-e2e-node/frontend/yarn.lock:904. Reference(s): GHSA-7mvr-c777-76hp, CVE-2025-59288 If this is a critical or high severity finding, please also link this issue in the #security channel in Slack. Semgrep found 1 Risk: Affected versions of rollup are vulnerable to Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting'). Manual Review Advice: A vulnerability from this advisory is reachable if you use Rollup to bundle JavaScript with Fix: Upgrade this library to at least version 4.22.4 at core/core-web/pnpm-lock.yaml:12935. Reference(s): GHSA-gcx4-mw62-g8wm, CVE-2024-47068 If this is a critical or high severity finding, please also link this issue in the #security channel in Slack. Semgrep found 1
Risk: Affected versions of @angular/common are vulnerable to Inefficient Regular Expression Complexity / Uncontrolled Resource Consumption. @angular/common's formatDate() function and DatePipe do not bound the length of the date format string before parsing it in an inefficient regular-expression loop. When the format argument is derived from untrusted input, an attacker can supply an excessively long format string to exhaust CPU and memory, causing a denial of service (heap exhaustion during SSR or main-thread freezes in the browser). Fix: Upgrade this library to at least version 21.2.17 at core/core-web/pnpm-lock.yaml:1117. Reference(s): GHSA-48r7-hpm6-gfxm If this is a critical or high severity finding, please also link this issue in the #security channel in Slack. Semgrep found 1 Risk: Affected versions of axios are vulnerable to Insertion of Sensitive Information Into Sent Data. The Node.js HTTP adapter in axios fails to clear the Proxy-Authorization header when a request that initially used an authenticated HTTP proxy is redirected to a target requiring no proxy (e.g. an HTTP-to-HTTPS redirect with no HTTPS proxy configured), leaking the proxy credentials to the final origin server. Manual Review Advice: A vulnerability from this advisory is reachable if you make requests with the Node.js HTTP adapter through an authenticated HTTP proxy with redirect following enabled Fix: Upgrade this library to at least version 1.16.0 at core/core-web/pnpm-lock.yaml:7566. Reference(s): GHSA-p92q-9vqr-4j8v, CVE-2026-44487 If this is a critical or high severity finding, please also link this issue in the #security channel in Slack. Semgrep found 1 Risk: Affected versions of axios are vulnerable to Exposure of Sensitive Information to an Unauthorized Actor. The Node.js HTTP adapter in axios leaks authenticated proxy credentials when following redirects. When a request traverses an authenticated proxy and is then redirected to a URL that no longer routes through that proxy, the stale Manual Review Advice: A vulnerability from this advisory is reachable if you use axios in Node.js with an authenticated proxy configured via the Fix: Upgrade this library to at least version 1.16.0 at core/core-web/pnpm-lock.yaml:7566. Reference(s): GHSA-j5f8-grm9-p9fc, CVE-2026-44486 If this is a critical or high severity finding, please also link this issue in the #security channel in Slack. Semgrep found 1 Risk: Affected versions of axios are vulnerable to Improperly Controlled Modification of Object Prototype Attributes ('Prototype Pollution') / Unintended Proxy or Intermediary ('Confused Deputy'). axios reads Fix: Upgrade this library to at least version 1.16.0 at core/core-web/pnpm-lock.yaml:7566. Reference(s): GHSA-35jp-ww65-95wh, GHSA-fvcv-3m26-pcqx, CVE-2026-44494 If this is a critical or high severity finding, please also link this issue in the #security channel in Slack. Semgrep found 1 Risk: Affected versions of axios are vulnerable to Improper Control of Generation of Code ('Code Injection') / Improperly Controlled Modification of Object Prototype Attributes ('Prototype Pollution'). axios contains a prototype-pollution gadget in its config merge pipeline. If Object.prototype.transformResponse is polluted by a separate vulnerability in the same process, mergeConfig() reads it through the prototype chain and transformData() executes the inherited function on every HTTP response body, enabling credential theft and response hijacking. Every axios HTTP call traverses this pipeline. Upgrade to 0.31.1, 1.15.2, or later. Fix: Upgrade this library to at least version 1.15.2 at core/core-web/pnpm-lock.yaml:7566. Reference(s): GHSA-3g43-6gmg-66jw, CVE-2026-44495 If this is a critical or high severity finding, please also link this issue in the #security channel in Slack. Semgrep found 1 Risk: Affected versions of axios are vulnerable to Server-Side Request Forgery (SSRF). Axios does not normalize IPv4-mapped IPv6 addresses before applying Manual Review Advice: A vulnerability from this advisory is reachable if you have a proxy configured via Fix: Upgrade this library to at least version 1.16.0 at core/core-web/pnpm-lock.yaml:7566. Reference(s): GHSA-pjwm-pj3p-43mv, CVE-2025-62718 If this is a critical or high severity finding, please also link this issue in the #security channel in Slack. Semgrep found 1 Risk: Affected versions of axios are vulnerable to Improperly Controlled Modification of Object Prototype Attributes ('Prototype Pollution'). An attacker can exploit this vulnerability by polluting Object.prototype via another dependency in the same Node.js process. Axios reads five HTTP adapter config properties (auth, baseURL, socketPath, beforeRedirect, insecureHTTPParser) via direct property access without hasOwnProperty guards, so the polluted values are silently picked up on every outbound HTTP request. This enables Authorization header credential injection, request hijacking via baseURL redirection, SSRF to internal Unix sockets, attacker-controlled callback execution during redirects, and request smuggling via the insecure HTTP parser. Fix: Upgrade this library to at least version 1.15.2 at core/core-web/pnpm-lock.yaml:7566. Reference(s): GHSA-q8qp-cvcw-x6jj, CVE-2026-42264 If this is a critical or high severity finding, please also link this issue in the #security channel in Slack. Semgrep found 1 Risk: Affected versions of axios are vulnerable to Permissive List of Allowed Inputs / Server-Side Request Forgery (SSRF) / Unintended Proxy or Intermediary ('Confused Deputy'). Axios contains an incomplete fix for CVE-2025-62718. The internal Manual Review Advice: A vulnerability from this advisory is reachable if you use Axios in Node.js with a proxy configured via the Fix: Upgrade this library to at least version 1.15.1 at core/core-web/pnpm-lock.yaml:7566. Reference(s): GHSA-pmwg-cvhr-8vh7, CVE-2026-42043 If this is a critical or high severity finding, please also link this issue in the #security channel in Slack. Semgrep found 1 Risk: Affected versions of axios are vulnerable to Improperly Controlled Modification of Object Prototype Attributes ('Prototype Pollution'). Axios do not guard reads of config properties (e.g. Fix: Upgrade this library to at least version 1.15.1 at core/core-web/pnpm-lock.yaml:7566. Reference(s): GHSA-pf86-5x62-jrwf, CVE-2026-42033 If this is a critical or high severity finding, please also link this issue in the #security channel in Slack. Semgrep found 1 Risk: Affected versions of vitest are vulnerable to Missing Authorization. When the Vitest UI server is listening, the deprecated isFileServingAllowed check is applied without normalizing the URL before filesystem operations, allowing path traversal that lets an attacker read, write, and execute arbitrary files outside the project directory. Manual Review Advice: A vulnerability from this advisory is reachable if you run the Vitest UI on Windows, or you expose the Vitest UI server to the network with the --api.host flag or api.host config option Fix: Upgrade this library to at least version 4.1.0 at core/core-web/pnpm-lock.yaml:14308. Reference(s): GHSA-5xrq-8626-4rwp If this is a critical or high severity finding, please also link this issue in the #security channel in Slack. Semgrep found 1 Risk: webpack 5.x before 5.76.0 is vulnerable to Improper Access Control due to ImportParserPlugin.js mishandling the magic comment feature. Due to this, webpack does not avoid cross-realm object access and an attacker who controls a property of an untrusted object can obtain access to the real global object. Manual Review Advice: A vulnerability from this advisory is reachable if you host an application utilizing webpack and an attacker can control a property of an untrusted object Fix: Upgrade this library to at least version 5.76.0 at core/core-web/pnpm-lock.yaml:14501. Reference(s): GHSA-hc6q-2mpp-qw7j, CVE-2023-28154 If this is a critical or high severity finding, please also link this issue in the #security channel in Slack. |
|
Semgrep found 344
The method identified is susceptible to injection. The input should be validated and properly If this is a critical or high severity finding, please also link this issue in the #security channel in Slack. Semgrep found 1 Skill instructs the agent to act autonomously without user confirmation, approval, or oversight. Excessive autonomy directives suppress the human-in-the-loop checkpoints that prevent unintended or malicious actions. In legitimate automation skills, user confirmation should be scoped narrowly; blanket directives to "act without asking" are a common pattern in malicious skills that aim to execute payloads silently. Review the full skill context. If this is a critical or high severity finding, please also link this issue in the #security channel in Slack. Semgrep found 1 Use of If this is a critical or high severity finding, please also link this issue in the #security channel in Slack. Semgrep found 1 Relative path used for script invocation in hook. Use absolute paths or environment variables like $CLAUDE_PROJECT_DIR, $CURSOR_PROJECT_DIR, or $HOME to ensure the correct script is executed regardless of working directory. If this is a critical or high severity finding, please also link this issue in the #security channel in Slack. Semgrep found 6
Using variable interpolation If this is a critical or high severity finding, please also link this issue in the #security channel in Slack. Semgrep found 2
Untrusted input might be used to build an HTTP request, which can lead to a Server-side request forgery (SSRF) vulnerability. SSRF allows an attacker to send crafted requests from the server side to other internal or external systems. SSRF can lead to unauthorized access to sensitive data and, in some cases, allow the attacker to control applications or systems that trust the vulnerable service. To prevent this vulnerability, avoid allowing user input to craft the base request. Instead, treat it as part of the path or query parameter and encode it appropriately. When user input is necessary to prepare the HTTP request, perform strict input validation. Additionally, whenever possible, use allowlists to only interact with expected, trusted domains. View Dataflow Graphflowchart LR
classDef invis fill:white, stroke: none
classDef default fill:#e7f5ff, color:#1c7fd6, stroke: none
subgraph File0["<b>e2e/dotcms-e2e-node/frontend/src/requests/pages.ts</b>"]
direction LR
%% Source
subgraph Source
direction LR
v0["<a href=https://github.com/dotCMS/core/blob/4e93115a4430825a74060565d6e255ef2a6a418a/e2e/dotcms-e2e-node/frontend/src/requests/pages.ts#L70 target=_blank style='text-decoration:none; color:#1c7fd6'>[Line: 70] request</a>"]
end
%% Intermediate
subgraph Traces0[Traces]
direction TB
v2["<a href=https://github.com/dotCMS/core/blob/4e93115a4430825a74060565d6e255ef2a6a418a/e2e/dotcms-e2e-node/frontend/src/requests/pages.ts#L79 target=_blank style='text-decoration:none; color:#1c7fd6'>[Line: 79] responseData</a>"]
v3["<a href=https://github.com/dotCMS/core/blob/4e93115a4430825a74060565d6e255ef2a6a418a/e2e/dotcms-e2e-node/frontend/src/requests/pages.ts#L79 target=_blank style='text-decoration:none; color:#1c7fd6'>[Line: 79] await</a>"]
v4["<a href=https://github.com/dotCMS/core/blob/4e93115a4430825a74060565d6e255ef2a6a418a/e2e/dotcms-e2e-node/frontend/src/requests/pages.ts#L70 target=_blank style='text-decoration:none; color:#1c7fd6'>[Line: 70] response</a>"]
v5["<a href=https://github.com/dotCMS/core/blob/4e93115a4430825a74060565d6e255ef2a6a418a/e2e/dotcms-e2e-node/frontend/src/requests/pages.ts#L70 target=_blank style='text-decoration:none; color:#1c7fd6'>[Line: 70] await</a>"]
v6["<a href=https://github.com/dotCMS/core/blob/4e93115a4430825a74060565d6e255ef2a6a418a/e2e/dotcms-e2e-node/frontend/src/requests/pages.ts#L89 target=_blank style='text-decoration:none; color:#1c7fd6'>[Line: 89] getActionsByContentlet</a>"]
v7["<a href=https://github.com/dotCMS/core/blob/4e93115a4430825a74060565d6e255ef2a6a418a/e2e/dotcms-e2e-node/frontend/src/requests/pages.ts#L89 target=_blank style='text-decoration:none; color:#1c7fd6'>[Line: 89] await</a>"]
v8["<a href=https://github.com/dotCMS/core/blob/4e93115a4430825a74060565d6e255ef2a6a418a/e2e/dotcms-e2e-node/frontend/src/requests/pages.ts#L89 target=_blank style='text-decoration:none; color:#1c7fd6'>[Line: 89] actions</a>"]
v9["<a href=https://github.com/dotCMS/core/blob/4e93115a4430825a74060565d6e255ef2a6a418a/e2e/dotcms-e2e-node/frontend/src/requests/pages.ts#L90 target=_blank style='text-decoration:none; color:#1c7fd6'>[Line: 90] action</a>"]
v10["<a href=https://github.com/dotCMS/core/blob/4e93115a4430825a74060565d6e255ef2a6a418a/e2e/dotcms-e2e-node/frontend/src/requests/pages.ts#L92 target=_blank style='text-decoration:none; color:#1c7fd6'>[Line: 92] executeAction</a>"]
v11["<a href=https://github.com/dotCMS/core/blob/4e93115a4430825a74060565d6e255ef2a6a418a/e2e/dotcms-e2e-node/frontend/src/requests/pages.ts#L44 target=_blank style='text-decoration:none; color:#1c7fd6'>[Line: 44] actionId</a>"]
v12["<a href=https://github.com/dotCMS/core/blob/4e93115a4430825a74060565d6e255ef2a6a418a/e2e/dotcms-e2e-node/frontend/src/requests/pages.ts#L47 target=_blank style='text-decoration:none; color:#1c7fd6'>[Line: 47] endpoint</a>"]
end
v2 --> v3
v3 --> v4
v4 --> v5
v5 --> v6
v6 --> v7
v7 --> v8
v8 --> v9
v9 --> v10
v10 --> v11
v11 --> v12
%% Sink
subgraph Sink
direction LR
v1["<a href=https://github.com/dotCMS/core/blob/4e93115a4430825a74060565d6e255ef2a6a418a/e2e/dotcms-e2e-node/frontend/src/requests/pages.ts#L48 target=_blank style='text-decoration:none; color:#1c7fd6'>[Line: 48] endpoint</a>"]
end
end
%% Class Assignment
Source:::invis
Sink:::invis
Traces0:::invis
File0:::invis
%% Connections
Source --> Traces0
Traces0 --> Sink
If this is a critical or high severity finding, please also link this issue in the #security channel in Slack. Semgrep found 1 Found usage of Vercel's AI product. If this is a critical or high severity finding, please also link this issue in the #security channel in Slack. Semgrep found 1 The application builds a file path from potentially untrusted data, which can lead to a path traversal vulnerability. An attacker can manipulate the path which the application uses to access files. If the application does not validate user input and sanitize file paths, sensitive files such as configuration or user data can be accessed, potentially creating or overwriting files. To prevent this vulnerability, validate and sanitize any input that is used to create references to file paths. Also, enforce strict file access controls. For example, choose privileges allowing public-facing applications to access only the required files. In Java, you may also consider using a utility method such as View Dataflow Graphflowchart LR
classDef invis fill:white, stroke: none
classDef default fill:#e7f5ff, color:#1c7fd6, stroke: none
subgraph File0["<b>dotCMS/src/main/java/com/dotcms/rest/ContentResource.java</b>"]
direction LR
%% Source
subgraph Source
direction LR
v0["<a href=https://github.com/dotCMS/core/blob/4e93115a4430825a74060565d6e255ef2a6a418a/dotCMS/src/main/java/com/dotcms/rest/ContentResource.java#L1424 target=_blank style='text-decoration:none; color:#1c7fd6'>[Line: 1424] multipart</a>"]
end
%% Intermediate
subgraph Traces0[Traces]
direction TB
v2["<a href=https://github.com/dotCMS/core/blob/4e93115a4430825a74060565d6e255ef2a6a418a/dotCMS/src/main/java/com/dotcms/rest/ContentResource.java#L1424 target=_blank style='text-decoration:none; color:#1c7fd6'>[Line: 1424] multipart</a>"]
v3["<a href=https://github.com/dotCMS/core/blob/4e93115a4430825a74060565d6e255ef2a6a418a/dotCMS/src/main/java/com/dotcms/rest/ContentResource.java#L1428 target=_blank style='text-decoration:none; color:#1c7fd6'>[Line: 1428] multipartPUTandPOST</a>"]
v4["<a href=https://github.com/dotCMS/core/blob/4e93115a4430825a74060565d6e255ef2a6a418a/dotCMS/src/main/java/com/dotcms/rest/ContentResource.java#L1484 target=_blank style='text-decoration:none; color:#1c7fd6'>[Line: 1484] multipart</a>"]
v5["<a href=https://github.com/dotCMS/core/blob/4e93115a4430825a74060565d6e255ef2a6a418a/dotCMS/src/main/java/com/dotcms/rest/ContentResource.java#L1499 target=_blank style='text-decoration:none; color:#1c7fd6'>[Line: 1499] part</a>"]
v6["<a href=https://github.com/dotCMS/core/blob/4e93115a4430825a74060565d6e255ef2a6a418a/dotCMS/src/main/java/com/dotcms/rest/ContentResource.java#L1499 target=_blank style='text-decoration:none; color:#1c7fd6'>[Line: 1499] part</a>"]
v7["<a href=https://github.com/dotCMS/core/blob/4e93115a4430825a74060565d6e255ef2a6a418a/dotCMS/src/main/java/com/dotcms/rest/ContentResource.java#L1581 target=_blank style='text-decoration:none; color:#1c7fd6'>[Line: 1581] processFile</a>"]
v8["<a href=https://github.com/dotCMS/core/blob/4e93115a4430825a74060565d6e255ef2a6a418a/dotCMS/src/main/java/com/dotcms/rest/ContentResource.java#L1613 target=_blank style='text-decoration:none; color:#1c7fd6'>[Line: 1613] part</a>"]
v9["<a href=https://github.com/dotCMS/core/blob/4e93115a4430825a74060565d6e255ef2a6a418a/dotCMS/src/main/java/com/dotcms/rest/ContentResource.java#L1616 target=_blank style='text-decoration:none; color:#1c7fd6'>[Line: 1616] badFileName</a>"]
v10["<a href=https://github.com/dotCMS/core/blob/4e93115a4430825a74060565d6e255ef2a6a418a/dotCMS/src/main/java/com/dotcms/rest/ContentResource.java#L1617 target=_blank style='text-decoration:none; color:#1c7fd6'>[Line: 1617] filename</a>"]
end
v2 --> v3
v3 --> v4
v4 --> v5
v5 --> v6
v6 --> v7
v7 --> v8
v8 --> v9
v9 --> v10
%% Sink
subgraph Sink
direction LR
v1["<a href=https://github.com/dotCMS/core/blob/4e93115a4430825a74060565d6e255ef2a6a418a/dotCMS/src/main/java/com/dotcms/rest/ContentResource.java#L1632 target=_blank style='text-decoration:none; color:#1c7fd6'>[Line: 1632] tmpFolder.getAbsolutePath() + File.separator + filename</a>"]
end
end
%% Class Assignment
Source:::invis
Sink:::invis
Traces0:::invis
File0:::invis
%% Connections
Source --> Traces0
Traces0 --> Sink
If this is a critical or high severity finding, please also link this issue in the #security channel in Slack. Semgrep found 1
Detected user input controlling a file path. An attacker could control the location of this file, to include going backwards in the directory with '../'. To address this, ensure that user-controlled variables in file paths are sanitized. You may also consider using a utility method such as org.apache.commons.io.FilenameUtils.getName(...) to only retrieve the file name from the path. View Dataflow Graphflowchart LR
classDef invis fill:white, stroke: none
classDef default fill:#e7f5ff, color:#1c7fd6, stroke: none
subgraph File0["<b>dotCMS/src/main/java/com/dotcms/rest/ContentResource.java</b>"]
direction LR
%% Source
subgraph Source
direction LR
v0["<a href=https://github.com/dotCMS/core/blob/4e93115a4430825a74060565d6e255ef2a6a418a/dotCMS/src/main/java/com/dotcms/rest/ContentResource.java#L1424 target=_blank style='text-decoration:none; color:#1c7fd6'>[Line: 1424] multipart</a>"]
end
%% Intermediate
subgraph Traces0[Traces]
direction TB
v2["<a href=https://github.com/dotCMS/core/blob/4e93115a4430825a74060565d6e255ef2a6a418a/dotCMS/src/main/java/com/dotcms/rest/ContentResource.java#L1424 target=_blank style='text-decoration:none; color:#1c7fd6'>[Line: 1424] multipart</a>"]
v3["<a href=https://github.com/dotCMS/core/blob/4e93115a4430825a74060565d6e255ef2a6a418a/dotCMS/src/main/java/com/dotcms/rest/ContentResource.java#L1428 target=_blank style='text-decoration:none; color:#1c7fd6'>[Line: 1428] multipartPUTandPOST</a>"]
v4["<a href=https://github.com/dotCMS/core/blob/4e93115a4430825a74060565d6e255ef2a6a418a/dotCMS/src/main/java/com/dotcms/rest/ContentResource.java#L1484 target=_blank style='text-decoration:none; color:#1c7fd6'>[Line: 1484] multipart</a>"]
v5["<a href=https://github.com/dotCMS/core/blob/4e93115a4430825a74060565d6e255ef2a6a418a/dotCMS/src/main/java/com/dotcms/rest/ContentResource.java#L1499 target=_blank style='text-decoration:none; color:#1c7fd6'>[Line: 1499] part</a>"]
v6["<a href=https://github.com/dotCMS/core/blob/4e93115a4430825a74060565d6e255ef2a6a418a/dotCMS/src/main/java/com/dotcms/rest/ContentResource.java#L1499 target=_blank style='text-decoration:none; color:#1c7fd6'>[Line: 1499] part</a>"]
v7["<a href=https://github.com/dotCMS/core/blob/4e93115a4430825a74060565d6e255ef2a6a418a/dotCMS/src/main/java/com/dotcms/rest/ContentResource.java#L1581 target=_blank style='text-decoration:none; color:#1c7fd6'>[Line: 1581] processFile</a>"]
v8["<a href=https://github.com/dotCMS/core/blob/4e93115a4430825a74060565d6e255ef2a6a418a/dotCMS/src/main/java/com/dotcms/rest/ContentResource.java#L1613 target=_blank style='text-decoration:none; color:#1c7fd6'>[Line: 1613] part</a>"]
v9["<a href=https://github.com/dotCMS/core/blob/4e93115a4430825a74060565d6e255ef2a6a418a/dotCMS/src/main/java/com/dotcms/rest/ContentResource.java#L1616 target=_blank style='text-decoration:none; color:#1c7fd6'>[Line: 1616] badFileName</a>"]
v10["<a href=https://github.com/dotCMS/core/blob/4e93115a4430825a74060565d6e255ef2a6a418a/dotCMS/src/main/java/com/dotcms/rest/ContentResource.java#L1617 target=_blank style='text-decoration:none; color:#1c7fd6'>[Line: 1617] filename</a>"]
end
v2 --> v3
v3 --> v4
v4 --> v5
v5 --> v6
v6 --> v7
v7 --> v8
v8 --> v9
v9 --> v10
%% Sink
subgraph Sink
direction LR
v1["<a href=https://github.com/dotCMS/core/blob/4e93115a4430825a74060565d6e255ef2a6a418a/dotCMS/src/main/java/com/dotcms/rest/ContentResource.java#L1631 target=_blank style='text-decoration:none; color:#1c7fd6'>[Line: 1631] new File(<br> tmpFolder.getAbsolutePath() + File.separator + filename)</a>"]
end
end
%% Class Assignment
Source:::invis
Sink:::invis
Traces0:::invis
File0:::invis
%% Connections
Source --> Traces0
Traces0 --> Sink
If this is a critical or high severity finding, please also link this issue in the #security channel in Slack. Semgrep found 1
Detected If this is a critical or high severity finding, please also link this issue in the #security channel in Slack. Semgrep found 3
DNS lookup command uses a variable in the hostname, which could exfiltrate sensitive data via DNS queries. In Claude Code and Cursor hooks, this pattern can leak secrets or environment data to attacker-controlled domains. Use static hostnames only in DNS commands. If this is a critical or high severity finding, please also link this issue in the #security channel in Slack. |
|
Claude finished @dsolistorres's task in 2m 23s —— View job Claude finished @dsolistorres's task in 2m 35s —— View job Rollback Safety Analysis
Result: ✅ Safe to RollbackThe label Files changed: 3 (all Java — no SQL, no ES mapping, no runonce tasks)
Category-by-category analysis:
Rollback behavior: Rolling back to N-1 simply restores the old behavior — archived content reappears in EDIT/PREVIEW renders and the "spinning forever" page-save bug returns. No data loss, no schema mismatch, no ES index corruption. |
🤖 Bedrock Review —
|
🔍 dotCMS Backend Review[🟠 High]
// The method declares checked DotDataException...
protected void validateContainerEntries(...) throws DotDataException {
// ...but both callers catch only HTMLPageAssetNotFoundException
} catch(HTMLPageAssetNotFoundException e) { ... }
// DotDataException propagates to JAX-RS mapper, leaking raw exception message💡 Remove [🟠 High]
Logger.warn(this, "Skipping contentlet '" + contentletId
+ "' on page content save (archived or not found)", e);
// ↑ Logs full stack trace + NotFoundInDbException message on every archived-content save💡 For the expected case, log without the exception: [🟡 Medium]
[🟡 Medium]
} catch (DotDataException | DotSecurityException e) {
throw new BadRequestException(e, e.getMessage()); // raw exception message in HTTP response
}💡 Follow-up: Next steps
|
🔍 dotCMS Backend Review[🟡 Medium]
.orElseThrow(() -> new DoesNotExistException("Container with ID :" + containerId + " not found"));💡 [🟡 Medium]
final Structure structure = new StructureDataGen().nextPersisted();💡 Replace with Next steps
|
Review findings addressedAll findings from the automated backend-review passes have been resolved across the latest commits. Summary: 🔴 Critical
🟠 High
🟡 Medium
Verification: each round,
|
🔍 dotCMS Backend Review[🟠 High]
final Structure structure = new StructureDataGen().nextPersisted();
final Container localContainer = new ContainerDataGen().withStructure(structure, "")💡 Replace with [🟠 High]
if (e.getCause() instanceof NotFoundInDbException) {
// continue (skip archived)
}💡 Use [🟡 Medium]
} catch (DotDataException | DotSecurityException e) {
throw new BadRequestException("Error retrieving content types for the container");
}💡 Separate the catches: re-throw [🟡 Medium]
throw new BadRequestException("The content type assigned to a contentlet is not valid for the container");💡 Including the content-type variable is safe: Next steps
|
|
Thanks — addressing both observations: 🟡 🟡
The genuine leak vectors in this method — |
…#35993) Archived contentlets kept their working version, so showLive=false lookups in EDIT/PREVIEW mode still resolved and rendered them; the page-save endpoint then returned a 400 ("Can't find contentlet") for the archived id in the payload, hanging content removal ("spins forever"). - PageRenderUtil.populateContainers() now skips contentlet.isArchived() in all modes, consistent with LIVE-mode behavior. - PageResource.validateContainerEntries() skips archived content instead of throwing the 400 that caused the hang, so a page referencing archived content stays saveable. - Adds self-validating integration test (renders before archive -> 1, after -> 0). Refs: #35993 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…35993) Refines validateContainerEntries per PR review: - Do not catch DotSecurityException: let it propagate to DotSecurityExceptionMapper (HTTP 403 + security audit log) instead of wrapping it as a 400. - Do not leak exception messages (PII / SQL fragments) to the client: log full detail server-side and return a generic message. - Single contentlet lookup instead of three (drop the includeDeleted lookup + isArchived() call); archived content is detected via the existing AnyLanguageAnyVariant lookup which excludes deleted versions. - Treat "archived" and "not found" identically (silent skip) to avoid leaking content existence. - Guard against blank/null contentletId before hitting the DB. - Test: use APILocator.getContentletAPI() (not the Impl) and reuse the systemUser local instead of APILocator.systemUser(). Refs: #35993 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- PageRenderUtil: stop swallowing DotSecurityException in the archived-state
check; only DotStateException/DotDataException warn-and-skip, DotSecurityException
now propagates so access-control failures are not hidden.
- PageResource.validateContainerEntries:
- findContentletByIdentifierAnyLanguageAnyVariant wraps ALL errors (incl. real DB
failures) in DotContentletStateException; inspect the cause -- skip only when it
is NotFoundInDbException (archived/not found), otherwise surface the error
instead of silently dropping the contentlet.
- return a generic client-facing message (no contentletId) and log full detail
server-side with the cause chain (Logger.warn/error with the exception).
- add an isSet guard for containerId.
- declare throws DotDataException (removes the now-unreachable catch).
Refs: #35993
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- validateContainerEntries: drop "throws DotDataException" (it created a path for raw exception messages to reach the JAX-RS mapper). The declared checked DotDataException from the lookup is now caught internally and re-thrown as a generic BadRequestException, so the method only emits unchecked, sanitized errors. - Log the expected "archived or not found" case without the exception (no stack trace / wrapped lookup message on every archived-content save); keep the exception only on the genuine-error path. - getContainerContentTypes: return a generic client message and log full detail server-side instead of forwarding e.getMessage() (tightens a pre-existing leak in the validation call path). - PageRenderUtil: clarify the comment on why DotSecurityException is left uncaught. Refs: #35993 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
getContainerContentTypes throws an unchecked DoesNotExistException whose message embeds the containerId; it escaped the catch added previously and reached the JAX-RS mapper, leaking the identifier in the 404 response. Include it in the catch and return the generic message (full detail still logged server-side). Refs: #35993 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…#35993) Reverts catching DoesNotExistException in getContainerContentTypes. Catching it turned a missing container into a 400 with a generic message, breaking the Define_Contentlets_StyleProperties postman test which asserts 404 + "Container with ID :<id> not found". The id in that message is the caller's own input (not sensitive), and the 404 + message is an established, tested API contract. DotDataException/DotSecurityException are still sanitized. Refs: #35993 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…#35993) Per review: new test code should use the modern ContentType API rather than the legacy Structure. Switch the archived-content test's container to ContainerDataGen.withContentType(ContentTypeDataGen...). Behavior is unchanged (rendering is driven by the MultiTree). Refs: #35993 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
f24972f to
e6ce86b
Compare
- validateContainerEntries: detect the archived/not-found case with ExceptionUtil.causedBy(e, NotFoundInDbException.class) (full cause chain) instead of checking only the direct getCause(), so an added intermediate wrapper can't silently turn it into a client error. - getContainerContentTypes: split the catch so DotSecurityException is re-thrown as ForbiddenException (403 via the mapper) rather than collapsed into a 400; a system user lacking container read permission is a server misconfiguration, not a bad request. DotDataException still maps to a generic 400; DoesNotExistException still surfaces the 404 contract. - Include the (public, non-sensitive) content-type variable in the "not allowed in this container" message for a more actionable client error. Refs: #35993 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Review status — addressed vs. intentionally rejectedPushed ✅ Addressed
🚫 Intentionally not changed (reiterating, with rationale)
Verification: |
|
Tick the box to add this pull request to the merge queue (same as
|
Problem
When a contentlet placed in a container on a page is archived, it continues to render in the page's Edit and Preview modes (UVE). It is correctly hidden in Live mode. Archived content should not appear on a page in any mode.
A secondary symptom: while an archived contentlet remains in a container, removing a different (non-archived) contentlet from the page hangs ("spinning forever"). The browser POST to
/api/v1/page/{id}/contentreturns 400 "Can't find contentlet: <archived-id>".Root cause
Archiving sets
deleted = trueon the version info but keeps the working inode. In Edit/PreviewPageMode.showLive = false, soPageRenderUtil.getSpecificContentlet()resolvesfind(workingInode)and returns the archived working version — andpopulateContainers()only guarded againstnull. Live mode has no live version, so it was already excluded.Because the archived content kept rendering, it stayed in the editor's page model. On save (a full replacement),
PageResource.validateContainerEntries()looked the id up viafindContentletByIdentifierAnyLanguageAnyVariant(), which filters out deleted versions, found nothing, and threwDotContentletStateException— aRuntimeExceptionnot caught by the method'scatch (DotDataException)— surfacing as HTTP 400 and hanging the remove.Changes
PageRenderUtil.populateContainers()— skipcontentlet.isArchived()in all modes, consistent with Live-mode behavior. (Also corrected a strayDotStateExceptionimport.)PageResource.validateContainerEntries()— skip archived content instead of throwing the 400, so a page that still references archived content remains saveable (the content gets removed on save).PageResourceTest— new self-validating integration testtestArchivedContentNotRenderedInEditAndPreviewMode: renders the page before archiving (asserts the content shows, count == 1), archives, then asserts count == 0 in PREVIEW and EDIT modes.Testing
expected:<0> but was:<1>.PageResourceTest(31 tests) passes against the fixed core with the build cache disabled.After this fix, archived content no longer renders on a page in any mode. Because the page-save endpoint (
POST /api/v1/page/{id}/content) is a full replacement of each container's content, the next time a user saves the page the archived content — no longer in the editor's model — is removed from the page'smulti_treeassociation.Implication: if that content is later unarchived, it will not automatically reappear on the page; it must be re-added manually.
We consider this acceptable (archived content shouldn't be bound to live pages), but flagging it explicitly. An alternative — preserving the
multi_treeassociation so unarchive restores placement — was considered and rejected as more complex and less intuitive. Please confirm you're comfortable with the chosen semantics.Refs: #35993
🤖 Generated with Claude Code