
=====================================================================

                                  CERT-Renater

                      Note d'Information No. 2023/VULN027

_____________________________________________________________________

DATE                : 26/01/2023

HARDWARE PLATFORM(S): /

OPERATING SYSTEM(S): Systems running argo-cd versions prior to
                          2.6.0-rc5, v2.5.8, v2.4.20, v2.3.14.

=====================================================================
https://github.com/argoproj/argo-cd/security/advisories/GHSA-q9hr-j4rf-8fjc
https://github.com/argoproj/argo-cd/security/advisories/GHSA-6p4m-hw2h-6gmw
_____________________________________________________________________


JWT audience claim is not verified
Critical
crenshaw-dev published GHSA-q9hr-j4rf-8fjc Jan 25, 2023


Package
github.com/argoproj/argo-cd (Go)

Affected versions
1.8.2 through 2.6.0-rc4, v2.5.7, v2.4.18, v2.3.13

Patched versions
2.6.0-rc5, v2.5.8, v2.4.20, v2.3.14


Description

Impact

All versions of Argo CD starting with v1.8.2 are vulnerable to an
improper authorization bug causing the API to accept certain invalid
tokens.

OIDC providers include an aud (audience) claim in signed tokens. The
value of that claim specifies the intended audience(s) of the token
(i.e. the service or services which are meant to accept the token).
Argo CD does validate that the token was signed by Argo CD's
configured OIDC provider. But Argo CD does not validate the audience
claim, so it will accept tokens that are not intended for Argo CD.

If Argo CD's configured OIDC provider also serves other audiences
(for example, a file storage service), then Argo CD will accept a
token intended for one of those other audiences. Argo CD will grant
the user privileges based on the token's groups claim, even though
those groups were not intended to be used by Argo CD.

This bug also increases the blast radius of a stolen token. If an
attacker steals a valid token for a different audience, they can use
it to access Argo CD.


Patches

A patch for this vulnerability has been released in the following
Argo CD versions:

     v2.6.0-rc5
     v2.5.8
     v2.4.20
     v2.3.14

The patch introduces a new allowedAudiences to the OIDC config block.
By default, the client ID is the only allowed audience. Users who want
Argo CD to accept tokens intended for a different audience may use
allowedAudiences to specify those audiences.

apiVersion: v1
kind: ConfigMap
metadata:
   name: argocd-cm
data:
   oidc.config: |
     name: Example
     allowedAudiences:
     - audience-1
     - audience-2
     - argocd-client-id  # If `allowedAudiences` is non-empty, Argo CD's
        client ID must be explicitly added if you want to allow it.

Even though the OIDC spec requires the audience claim, some tokens may
not include it. To avoid a breaking change in a patch release,
versions < 2.6.0 of Argo CD will skip the audience claim check for
tokens that have no audience. In versions >= 2.6.0, Argo CD will
reject all tokens which do not have an audience claim. Users can
opt into the old behavior by setting an option:

apiVersion: v1
kind: ConfigMap
metadata:
   name: argocd-cm
data:
   oidc.config: |
     name: Example
     skipAudienceCheckWhenTokenHasNoAudience: true


Workarounds

There is no workaround besides upgrading.
Credits

The Argo CD team would like to express their gratitude to
Vladimir Pouzanov (@farcaller) from Indeed, who discovered the issue,
reported it confidentially according to our guidelines, and actively
worked with the project to provide a remedy. Many thanks to Vladimir!


References

     How to configure OIDC in Argo CD
     OIDC spec section discussing the audience claim
     JWT spec section discussing the audience claim


For more information

     Open an issue in the Argo CD issue tracker or discussions
     Join us on Slack in channel #argo-cd


Severity
Critical

9.0/ 10

CVSS base metrics

Attack vector
Network

Attack complexity
High

Privileges required
None

User interaction
None

Scope
Changed

Confidentiality
High

Integrity
High

Availability
High

CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:H/I:H/A:H

CVE ID
CVE-2023-22482

Weaknesses
No CWEs

Credits

     @farcaller farcaller


_____________________________________________________________________


Controller reconciles apps outside configured namespaces when
sharding is enabled

High
crenshaw-dev published GHSA-6p4m-hw2h-6gmw Jan 25, 2023


Package
github.com/argoproj/argo-cd (Go)

Affected versions
2.5.0-rc1 through 2.5.7, 2.6.0-rc4

Patched versions
2.5.8, 2.6.0-rc5


Description

Impact

All Argo CD versions starting with 2.5.0-rc1 are vulnerable to an
authorization bypass bug which allows a malicious Argo CD user to
deploy Applications outside the configured allowed namespaces.
Description of exploit

Reconciled Application namespaces are specified as a
comma-delimited list of glob patterns. When sharding is enabled on
the Application controller, it does not enforce that list of
patterns when reconciling Applications. For example, if Application
namespaces are configured to be argocd-*, the Application controller
may reconcile an Application installed in a namespace called other,
even though it does not start with argocd-.

Reconciliation of the out-of-bounds Application is only triggered
when the Application is updated, so the attacker must be able to
cause an update operation on the Application resource.
Limitations

This bug only applies to users who have explicitly enabled the
"apps-in-any-namespace" feature by setting application.namespaces
in the argocd-cmd-params-cm ConfigMap or otherwise setting the
--application-namespaces flags on the Application controller and
API server components. The apps-in-any-namespace feature is in
beta as of this Security Advisory's publish date.

The bug is also limited to Argo CD instances where sharding is
enabled by increasing the replicas count for the Application
controller.

Finally, the AppProjects' sourceNamespaces field acts as a
secondary check against this exploit. To cause reconciliation of
an Application in an out-of-bounds namespace, an AppProject must
be available which permits Applications in the out-of-bounds
namespace.


Patches

A patch for this vulnerability has been released in the following
Argo CD versions:

     v2.5.8
     v2.6.0-rc5


Workarounds

Running only one replica of the Application controller will prevent
exploitation of this bug.

Making sure all AppProjects' sourceNamespaces are restricted within
the confines of the configured Application namespaces will also
prevent exploitation of this bug.


Credits

Thanks to ChangZhuo Chen (@czchen) for finding the issue and for
contributing the fix!
References

     Documentation for apps-in-any-namespace

For more information

     Open an issue in the Argo CD issue tracker or discussions
     Join us on Slack in channel #argo-cd


Severity
High

8.5/ 10

CVSS base metrics

Attack vector
Network

Attack complexity
High

Privileges required
Low

User interaction
None

Scope
Changed

Confidentiality
High

Integrity
High

Availability
High

CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:C/C:H/I:H/A:H

CVE ID
CVE-2023-22736

Weaknesses
No CWEs


Credits

     @czchen czchen
     @crenshaw-dev crenshaw-dev


=========================================================
+ CERT-RENATER        |    tel : 01-53-94-20-44         +
+ 23/25 Rue Daviel    |    fax : 01-53-94-20-41         +
+ 75013 Paris         |   email:cert@support.renater.fr +
=========================================================


