docs(nx-dev): add CVE reference on remote cache (#31639)

Improved the clarity of caching risks, added detailed explanations on CREEP vulnerability, and linked to the CVE-2025-36852 publication.
This commit is contained in:
Benjamin Cabanes 2025-06-18 14:17:10 -04:00 committed by GitHub
parent 1a9405b0bc
commit 9b756bef7e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 78 additions and 46 deletions

View File

@ -17,9 +17,9 @@ If you are an enterprise and **data privacy and security is a concern**, [reach
{% /callout %} {% /callout %}
{% callout type="info" title="Self-hosted caching is now free" %} {% callout type="warning" title="Bucket-based caches are vulnerable to poisoning and often prohibited in organizations" %}
Self-hosted caching is **now free for everyone** to use. CREEP (CVE-2025-36852) is a critical vulnerability in bucket-based self-hosted remote caches. It lets attackers with PR access poison production builds via a race condition during artifact creation—before security checks can catch it. [Learn more](/blog/cve-2025-36852-critical-cache-poisoning-vulnerability-creep)
{% /callout %} {% /callout %}

View File

@ -17,9 +17,9 @@ If you are an enterprise and **data privacy and security is a concern**, [reach
{% /callout %} {% /callout %}
{% callout type="info" title="Self-hosted caching is now free" %} {% callout type="warning" title="Bucket-based caches are vulnerable to poisoning and often prohibited in organizations" %}
Self-hosted caching is **now free for everyone** to use. CREEP (CVE-2025-36852) is a critical vulnerability in bucket-based self-hosted remote caches. It lets attackers with PR access poison production builds via a race condition during artifact creation—before security checks can catch it. [Learn more](/blog/cve-2025-36852-critical-cache-poisoning-vulnerability-creep)
{% /callout %} {% /callout %}

View File

@ -16,9 +16,9 @@ If you are an enterprise and **data privacy and security is a concern**, [reach
**Are you an OSS project?** Nx Cloud is free for OSS. [Reach out here](/pricing#oss). **Are you an OSS project?** Nx Cloud is free for OSS. [Reach out here](/pricing#oss).
{% /callout %} {% /callout %}
{% callout type="info" title="Self-hosted caching is now free" %} {% callout type="warning" title="Bucket-based caches are vulnerable to poisoning and often prohibited in organizations" %}
Self-hosted caching is **now free for everyone** to use. CREEP (CVE-2025-36852) is a critical vulnerability in bucket-based self-hosted remote caches. It lets attackers with PR access poison production builds via a race condition during artifact creation—before security checks can catch it. [Learn more](/blog/cve-2025-36852-critical-cache-poisoning-vulnerability-creep)
{% /callout %} {% /callout %}

View File

@ -7,10 +7,6 @@ description: The @nx/shared-fs-cache plugin enables you to use a shared file sys
The `@nx/shared-fs-cache` plugin enables you to host your remote cache on a shared file system directory. While you're responsible for implementing the actual directory sharing mechanism, the plugin configures Nx to read from both your local cache and the shared directory. The `@nx/shared-fs-cache` plugin enables you to host your remote cache on a shared file system directory. While you're responsible for implementing the actual directory sharing mechanism, the plugin configures Nx to read from both your local cache and the shared directory.
{% callout type="warning" title="Potential Cache Poisoning" %}
Using a shared file system folder for remote caching introduces the risk of [cache poisoning](/troubleshooting/unknown-local-cache). To mitigate this risk, consider using [Nx Replay](/ci/features/remote-cache) instead.
{% /callout %}
{% callout type="deepdive" title="Free managed remote cache with Nx Cloud" %} {% callout type="deepdive" title="Free managed remote cache with Nx Cloud" %}
Note, you can get started for free with a **fully managed remote caching powered by Nx Cloud**. It comes with a generous Hobby plan that is enough for most small teams. [Learn more here](/nx-cloud). Note, you can get started for free with a **fully managed remote caching powered by Nx Cloud**. It comes with a generous Hobby plan that is enough for most small teams. [Learn more here](/nx-cloud).
@ -21,9 +17,9 @@ If you are an enterprise and **data privacy and security is a concern**, [reach
{% /callout %} {% /callout %}
{% callout type="info" title="Self-hosted caching is now free" %} {% callout type="warning" title="Bucket-based caches are vulnerable to poisoning and often prohibited in organizations" %}
Self-hosted caching is **now free for everyone** to use. CREEP (CVE-2025-36852) is a critical vulnerability in bucket-based self-hosted remote caches. It lets attackers with PR access poison production builds via a race condition during artifact creation—before security checks can catch it. [Learn more](/blog/cve-2025-36852-critical-cache-poisoning-vulnerability-creep)
{% /callout %} {% /callout %}

View File

@ -10,7 +10,13 @@ Nx offers different ways to enable self-hosted remote caching for your workspace
- **Using the official Nx packages** that come with ready-to-use adapters for AWS S3, GCP, Azure, and more. - **Using the official Nx packages** that come with ready-to-use adapters for AWS S3, GCP, Azure, and more.
- **Build your own cache server** by following the Nx Remote Caching OpenAPI spec. - **Build your own cache server** by following the Nx Remote Caching OpenAPI spec.
{% callout type="note" title="Free managed remote cache with Nx Cloud" %} {% callout type="warning" title="Bucket-based caches are vulnerable to poisoning and often prohibited in organizations" %}
CREEP (CVE-2025-36852) is a critical vulnerability in bucket-based self-hosted remote caches. It lets attackers with PR access poison production builds via a race condition during artifact creation—before security checks can catch it. [Learn more](/blog/cve-2025-36852-critical-cache-poisoning-vulnerability-creep)
{% /callout %}
{% callout type="note" title="Free & secure managed remote cache with Nx Cloud" %}
Note, you can get started for free with a **fully managed remote caching powered by Nx Cloud**. It comes with a generous Hobby plan that is enough for most small teams. [Learn more here](/nx-cloud). Note, you can get started for free with a **fully managed remote caching powered by Nx Cloud**. It comes with a generous Hobby plan that is enough for most small teams. [Learn more here](/nx-cloud).

View File

@ -41,6 +41,7 @@ export function Faq(): ReactElement {
<Link <Link
href="/deprecated/custom-tasks-runner#deprecating-custom-tasks-runner" href="/deprecated/custom-tasks-runner#deprecating-custom-tasks-runner"
title="See documentation" title="See documentation"
prefetch={false}
className="font-semibold" className="font-semibold"
> >
documented here. documented here.
@ -68,6 +69,32 @@ export function Faq(): ReactElement {
<Link <Link
href="/recipes/running-tasks/self-hosted-caching#build-your-own-caching-server" href="/recipes/running-tasks/self-hosted-caching#build-your-own-caching-server"
title="Learn more" title="Learn more"
prefetch={false}
className="font-semibold"
>
Learn more here.
</Link>
</p>
),
},
{
question:
'What cache poisoning vulnerabilities affect self-hosted solutions?',
answerJson:
'CREEP (Cache Race-condition Exploit Enables Poisoning) is a critical vulnerability (CVE-2025-36852) that affects self-hosted remote cache solutions. <br /> It allows any developer with pull request access to inject malicious code into your production builds through a race condition in the caching system. The attack is undetectable because it happens during artifact creation, before any security measures take effect.',
answerUi: (
<p>
CREEP (Cache Race-condition Exploit Enables Poisoning) is a critical
vulnerability (CVE-2025-36852) that affects self-hosted remote cache
solutions. <br /> It allows any developer with pull request access to
inject malicious code into your production builds through a race
condition in the caching system. The attack is undetectable because it
happens during artifact creation, before any security measures take
effect.{' '}
<Link
href="/blog/cve-2025-36852-critical-cache-poisoning-vulnerability-creep"
title="Learn more"
prefetch={false}
className="font-semibold" className="font-semibold"
> >
Learn more here. Learn more here.
@ -91,6 +118,7 @@ export function Faq(): ReactElement {
<Link <Link
href="/enterprise/security" href="/enterprise/security"
title="Learn more" title="Learn more"
prefetch={false}
className="font-semibold" className="font-semibold"
> >
Learn more here. Learn more here.
@ -111,37 +139,34 @@ export function Faq(): ReactElement {
answerUi: ( answerUi: (
<> <>
<p> <p>
Nx Cloud includes{' '} Nx Cloud includes enterprise-grade security features designed to
<Strong>enterprise-grade security features</Strong> designed to give give organizations more control over access and data protection.
organizations more control over access and data protection.
</p> </p>
<ul className="mt-4 list-disc space-y-2 px-4"> <ul className="mt-4 list-disc space-y-2 px-4">
<li> <li>
<Strong>Access Management</Strong>: Nx Cloud supports{' '} Access Management: Nx Cloud supports individual user
<Strong>individual user authentication</Strong> tied to personal authentication tied to personal accounts, enabling precise control
accounts, enabling precise control over who can access cached over who can access cached data. If a user leaves the company or
data. If a user leaves the company or changes roles, their access changes roles, their access can be revoked immediately without
can be revoked immediately without impacting others. impacting others.
</li> </li>
<li> <li>
<Strong>Personal Access Tokens</Strong>: Teams can issue and Personal Access Tokens: Teams can issue and revoke multiple access
revoke multiple access tokens, allowing fine-grained control over tokens, allowing fine-grained control over automation and
automation and integrations. integrations.
</li> </li>
<li> <li>
<Strong>No Cache Overrides</Strong>: Nx Cloud prevents No Cache Overrides: Nx Cloud prevents unauthorized cache
unauthorized cache modifications. modifications.
</li> </li>
<li> <li>
<Strong>SOC 2 Compliance</Strong>: Nx Cloud is SOC 2 certified, SOC 2 Compliance Nx Cloud is SOC 2 certified, demonstrating a high
demonstrating a high standard for security, availability, and standard for security, availability, and confidentiality.
confidentiality.
</li> </li>
<li> <li>
<Strong>Secure Deployment Options</Strong>: Nx Cloud though{' '} Secure Deployment Options Nx Cloud though Nx Enterprise includes{' '}
<Strong>Nx Enterprise</Strong>, includes{' '} single-tenant or on-prem options for teams needing full control
<Strong>single-tenant or on-prem options</Strong> for teams over their data storage and access policies.
needing full control over their data storage and access policies.
</li> </li>
</ul> </ul>
</> </>

View File

@ -4,7 +4,7 @@ import {
CheckCircleIcon, CheckCircleIcon,
ExclamationCircleIcon, ExclamationCircleIcon,
} from '@heroicons/react/24/solid'; } from '@heroicons/react/24/solid';
import { ButtonLink, SectionHeading } from '@nx/nx-dev/ui-common'; import { ButtonLink, SectionHeading, Strong } from '@nx/nx-dev/ui-common';
import { sendCustomEvent } from '@nx/nx-dev/feature-analytics'; import { sendCustomEvent } from '@nx/nx-dev/feature-analytics';
import Link from 'next/link'; import Link from 'next/link';
@ -20,6 +20,7 @@ export function RemoteCacheSolutions(): ReactElement {
Free remote caching solutions for any team. Free remote caching solutions for any team.
</SectionHeading> </SectionHeading>
</header> </header>
<div className="mt-24 flow-root"> <div className="mt-24 flow-root">
<div className="-mt-16 grid max-w-full grid-cols-1 gap-12 sm:mx-auto lg:mt-0 lg:grid-cols-3 xl:-mx-4"> <div className="-mt-16 grid max-w-full grid-cols-1 gap-12 sm:mx-auto lg:mt-0 lg:grid-cols-3 xl:-mx-4">
{/* NX CLOUD */} {/* NX CLOUD */}
@ -185,23 +186,20 @@ export function RemoteCacheSolutions(): ReactElement {
</ButtonLink> </ButtonLink>
</div> </div>
<ul className="mt-4 divide-y divide-slate-200 border-t border-slate-200 text-sm dark:divide-slate-800 dark:border-slate-800"> <ul className="mt-4 divide-y divide-slate-200 border-t border-slate-200 text-sm dark:divide-slate-800 dark:border-slate-800">
<li className="flex items-start justify-start gap-x-2 py-2.5">
<CheckCircleIcon
aria-hidden="true"
className="h-6 w-5 flex-none text-blue-600 dark:text-sky-500"
/>
<span>Free for all users</span>
</li>
<li className="flex items-start justify-start gap-x-2 py-2.5"> <li className="flex items-start justify-start gap-x-2 py-2.5">
<ExclamationCircleIcon <ExclamationCircleIcon
aria-hidden="true" aria-hidden="true"
className="h-6 w-5 flex-none text-yellow-600 dark:text-yellow-500" className="h-6 w-5 flex-none text-yellow-600 dark:text-yellow-500"
/> />
<span> <div>
Not recommended for organizations requiring HIPAA or SOC 2 <Strong>
compliance ( Bucket-based solutions are vulnerable to cache poisoning
attacks. Most regulated organizations prohibit their
use.
</Strong>{' '}
Consult your security team before using. (
<Link <Link
href="/enterprise/security" href="/enterprise/security#compliance-section"
prefetch={false} prefetch={false}
title="Remote caching security" title="Remote caching security"
className="font-semibold underline" className="font-semibold underline"
@ -209,7 +207,14 @@ export function RemoteCacheSolutions(): ReactElement {
learn more learn more
</Link> </Link>
) )
</span> </div>
</li>
<li className="flex items-start justify-start gap-x-2 py-2.5">
<CheckCircleIcon
aria-hidden="true"
className="h-6 w-5 flex-none text-blue-600 dark:text-sky-500"
/>
<span>Free for all users</span>
</li> </li>
<li className="flex items-start justify-start gap-x-2 py-2.5"> <li className="flex items-start justify-start gap-x-2 py-2.5">
<CheckCircleIcon <CheckCircleIcon