Divulgation d'information dans pagy (CVE-2026-54659)
Résumé
Vulnérabilité dans pagy (CVE-2026-54659). Risque d'opérations non autorisées ou de divulgation. Exploitable via nil. Atténuation : mise à jour vers 43.5.6 ou plus.
Description d'origine
La description telle que publiée par la source (souvent en anglais).
Summary
Pagy::I18n.locale= did not validate its argument before using it as a
path component to load the matching dictionary file (.yml). An
application that assigns untrusted input to the locale — e.g. the common
pattern Pagy::I18n.locale = params[:locale] — let that input influence
which file Pagy attempted to load.
Details
The setter stored the value as-is, and the loader joined it into a path
and read it:
# gem/lib/pagy/modules/i18n/i18n.rb
def locale=(value)
Thread.current[:pagy_locale] = value.to_s
end
# ...later, when translating:
path = pathnames.reverse.map { |p| p.join("#{locale}.yml") }.find(&:exist?)
dictionary = YAML.load_file(path)[locale]
Because the locale was used verbatim, a value such as an absolute path or
a ../-style string redirected the lookup outside the locales directory.
Pagy's subsequent structural check (dictionary['pagy']['p11n'])
prevents the file's contents from being returned, so this is not a
direct file read.
Fixed in 43.5.6 by constraining the locale to a BCP 47 shape before use:
LOCALE_PATTERN = /\A[a-zA-Z]{2,8}(-[a-zA-Z0-9]{1,8})*\z/
def locale=(value)
Thread.current[:pagy_locale] = value.to_s[LOCALE_PATTERN]
end
Any non-matching value (including nil) resolves to the default locale
and never reaches the file lookup.
PoC
In an application that sets Pagy::I18n.locale = params[:locale], the
loader appends .yml and reads .yml, so the request param
controls the target pat…
Source: GitHub Security Advisories (Global) NVD GitHub Advisory
Résumé généré automatiquement
Assemblé par SecPulse à partir des données sources (CVSS, CWE, versions affectées) à l'aide de modèles, sans IA. Vérifiez la description d'origine et les références ci-dessous.
Une vulnérabilité référencée CVE-2026-54659 a été découverte dans pagy.
Des attaquants peuvent cibler un point d'entrée spécifique comme nil à distance pour détourner le produit.
Risque d'opérations non autorisées ou de divulgation.
Action : mettez à jour pagy vers 43.5.6 ou supérieur.
En cas de doute, contactez votre service informatique ou cherchez « pagy CVE-2026-54659 » sur le site de l'éditeur.
CVE-2026-54659 (pagy) — CWE-200
Surface d'attaque : nil / YAML.load_file
Correctif : 43.5.6 — appliquer immédiatement
Plan : 1) Audit SBOM, 2) Mise à jour staging→prod, 3) Surveillance WAF/proxy sur les endpoints affectés, 4) Recherche d'IOC dans les logs.
Réfs : voir GHSA / avis éditeur / version corrigée liés sur cette page.
Une divulgation d'information (CWE-200) affecte pagy. Les attaquants atteignent le code vulnérable via nil.
Consultez l'avis de l'éditeur pour les versions affectées de pagy. Surface d'attaque : nil / YAML.load_file.
Gravité : ?. Risque d'opérations non autorisées ou de divulgation.
Mettre à jour vers 43.5.6.
En attendant le correctif : désactivez la fonctionnalité concernée, appliquez des règles WAF, ou restreignez l'accès par ACL réseau.
Recherchez dans les logs des requêtes correspondant aux IOC connus de cette CVE. Auditez les SBOM/dépendances.
Actions de réponse
Étapes concrètes et exemples de commandes que les équipes SOC/SRE doivent exécuter dans l'ordre
-
1Identify exposure identify
grep -r 'pagy' . | grep -v node_modulesリポジトリと本番環境の依存ファイル (package-lock.json / requirements.txt / go.sum / Gemfile.lock 等) で
pagyを grep し、稼働しているサービス・バージョンを把握する。 -
2Apply patch patch
Upgrade pagy to 43.5.6ステージング環境で 43.5.6 に上げて回帰テスト → 本番反映。回帰テストはアプリの主要ハッピーパスを含めること。
-
3Post-deployment verification verify
Confirm patched version is live in productionパッチ適用後、ステージングで PoC または同等の悪用パターンを再現して脆弱性が閉じたことを確認。本番ではアクセスログ・WAF でアラート再発が無いか継続監視。
Paquets affectés
Références
- package github.com
- web github.com
- web github.com
- web github.com
- web github.com
- web github.com