<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="/static/style.xsl" type="text/xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
  <id>https://vulnerability.circl.lu/rss/recent/all/10</id>
  <title>Most recent entries from all</title>
  <updated>2026-09-29T21:11:21.779565+00:00</updated>
  <author>
    <name>Vulnerability-Lookup</name>
    <email>info@circl.lu</email>
  </author>
  <link href="https://vulnerability.circl.lu" rel="alternate"/>
  <generator uri="https://lkiesow.github.io/python-feedgen" version="1.0.0">python-feedgen</generator>
  <subtitle>Contains only the most 10 recent entries.</subtitle>
  <entry>
    <id>https://vulnerability.circl.lu/vuln/ghsa-h98r-wv3h-fr38</id>
    <title>GHSA-h98r-wv3h-fr38 — Argo CD: Stored XSS in application link annotations enables developer-to-admin privilege escalation</title>
    <updated>2026-09-29T21:11:22.275996+00:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml"><p><strong>Affected:</strong> Go: github.com/argoproj/argo-cd/v3, Go: github.com/argoproj/argo-cd/v2, Go: github.com/argoproj/argo-cd</p>
<p>### Summary</p>
<p>A user with **application write access (developer role)** can set `link.argocd.argoproj.io/*` annotations on any ArgoCD Application. These annotation values are rendered in the Summary tab's **URLs section** as `&lt;a href&gt;` elements without URL validation. Using the pipe-separator trick (`Display Text | javascript:...`), an attacker can inject a `javascript:` URI while displaying a legitimate-looking label (e.g. `GitHub Repo`). When a higher-privileged user (admin) clicks the link, **arbitrary JavaScript executes in the ArgoCD origin context** in the admin's authenticated session context, enabling API exfiltration and privilege escalation from developer to admin.</p>
<p>### Details</p>
<p>**Vulnerable sink:** `ui/src/app/applications/components/application-summary/application-summary.tsx:277`</p>
<p>```tsx
const parts = (url || '').split('|');
&lt;a key={i} href={parts.length &gt; 1 ? parts[1] : parts[0]} target='_blank'&gt;
    {parts[0]}
&lt;/a&gt;
```</p>
<p>The annotation value is split on `|`. `parts[0]` becomes the visible link label; `parts[1]` becomes the `href`. **No call to `isValidURL()` is made**, unlike the protected `ApplicationURLs` component (`application-urls.tsx:72,80`) which does validate URLs and blocks `javascript:`. The `target='_blank'` opens a new tab that inherits the ArgoCD origin, giving the injected script same-origin fetch access to all ArgoCD APIs using the victim's authenticated session (credentialed `fetch()` calls).</p>
<p>**Root cause:** React 16.x does not block `javascript…</p></div>
    </content>
    <link href="https://vulnerability.circl.lu/vuln/ghsa-h98r-wv3h-fr38"/>
  </entry>
</feed>
