Zatruwanie pamięci podręcznej w Nuxt OG Image poprzez możliwe do wyliczenia klucze na niepodpisanych trasach dynamicznych obrazów
Dostawca: Nuxt
Produkt: Nuxt OG Image
Wersja: 6.2.5
Opis: Ze względu na specyfikę buforowania i generowania kluczy w pamięci podręcznej obrazów Open Graph tworzonej przez moduł, nieuwierzytelniony atakujący może zmodyfikować zawartość obrazu (na przykład parametr title) dostarczanego użytkownikowi.
Wpływ: Podszywanie się pod zawartość (Content Spoofing)
Podatny komponent: trasa /_og/d/*.png
Warunki eksploatacji: Dostęp do aplikacji
Mitygacja: Zaktualizuj do 6.7.2 i ustaw odpowiednio bezpieczny secret w konfiguracji ogImage
Badacz: Dmitry Vanin (Positive Technologies)
Badania
Podczas poprzednich badań nad podatnością,) odkryto, że wersja 6.2.5 zmieniła mechanizm generowania indeksów pamięci podręcznej; obecnie uwzględnia ona parametry przekazywane podczas generowania obrazu.
Obraz jest jednak nadal generowany na podstawie danych przekazywanych atakującemu.
Listing 1. Nowy kod do generowania indeksów w pamięci podręcznej
export function resolvePathCacheKey(e: H3Event, path: string, resolvedOptions?: Record<string, any>) {
const siteConfig = getSiteConfig(e, {
resolveRefs: true,
})
const basePath = withoutTrailingSlash(withoutLeadingSlash(normalizeKey(path)))
const hashParts: any[] = [
basePath,
import.meta.prerender ? '' : siteConfig.url,
]
// Hash resolved options (not raw query string) so unknown/extra query params
// cannot produce unique cache keys and bypass the cache.
if (resolvedOptions)
hashParts.push(hash(resolvedOptions))
return [
(!basePath || basePath === '/') ? 'index' : basePath,
hash(hashParts),
].join(':')
}
W tym przypadku basePath jest pobierany z parametru _path, natomiast resolvedOptions to znormalizowane ustawienia komponentu, na przykład:
Listing 2. Przykład resolvedOptions
{"emojis":"noto","extension":"png","width":1200,"height":600,"cacheMaxAgeSeconds":259200,"component":"OgImageDefaultImageTakumi"}
Z analizy resolvedOptions wyciągnięto wniosek, że na ogół wszystkie parametry są znane albo z bezpośredniego odnośnika do OG Image, albo z odpowiedzi serwera.
Odtworzenie podatności
-
Znajdź trasę do OG Image. Rysunek 1. Demonstracja wyszukiwania trasy do OG Image
(width: 974, height: 361)
-
Pobierz parametry z odpowiedzi serwera, zwłaszcza
cacheMaxAgeSeconds(nagłówekcache-control, kluczs-maxage); pozostałe parametry są znane z tagów meta oraz z parametruc_<component name>. Rysunek 2. Pozyskiwanie parametrów(width: 974, height: 245)
-
Wygeneruj klucz pamięci podręcznej za pomocą skryptu. Listing 3. Skrypt
import {hash} from "ohash";
var url = "https://contoso.com"
var obj = JSON.parse(`{"emojis":"noto","extension":"png","width":1200,"height":600,"cacheMaxAgeSeconds":259200,"component":"OgImageBlogPostTakumi"}`)
var basePath = '/'
var hashParts = [
basePath,
url
]
if (obj)
hashParts.push(hash(obj))
console.log([
(!basePath || basePath === '/') ? 'index' : basePath,
hash(hashParts),
].join(':'))
-
Powtórz kroki jak w podatności 1,), przesyłając dodatkowo uzyskany
cacheKey. -
W ten sposób uzyskano ten sam wynik co w podatności 1). Rysunek 4. Odpowiedź serwera
(width: 974, height: 729)
Podziękowania
Badacz: Dmitry Vanin (Positive Technologies)
Co trzeba zrobić
Zaktualizuj do wersji 6.7.2 i ustaw odpowiednio bezpieczny secret w konfiguracji ogImage.
Czego dotyczy
Kliknij technologię, aby zobaczyć wszystkie dotyczące jej podatności.
| Platforma | Paczka | Podatne wersje | Poprawka w wersji |
|---|---|---|---|
| Paczka npm | nuxt-og-image | >= 6.2.5, < 6.7.0 | 6.7.0 |
Odnośniki
- https://github.com/nuxt-modules/og-image/security/advisories/GHSA-2x6f-rp82-ppmj
- https://nvd.nist.gov/vuln/detail/CVE-2026-102527
- https://github.com/nuxt-modules/og-image/pull/638
- https://github.com/nuxt-modules/og-image/commit/e6c5b53ce7f434ab8cbc91298dccfb2b515c56a5
- https://github.com/nuxt-modules/og-image
- https://github.com/nuxt-modules/og-image/releases/tag/v6.7.0
- Wektor CVSS
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:L/VA:N/SC:N/SI:N/SA:N- Słabość (CWE)
CWE-349- Platforma
- npm
- Paczka
nuxt-og-image- Ujawniono
- 15.10.2026
- Aktualizacja
- 19.10.2026 08:00
Źródła i licencje · Redakcja lub tłumaczenie: DockRay. Zachowano prawa źródeł i obowiązujące licencje.
OSV / GitHub Advisory Database - GHSA-2x6f-rp82-ppmj - CC BY 4.0
Historia podatności: nuxt-og-image
Wszystkie opisane podatności tej paczki (Paczka npm), od najnowszej. Widać, czy to jednorazowa wpadka, czy paczka, której trzeba pilnować.
- Wszystkich wpisów
- 6
- Pierwsza → ostatnia
- 03.2026 10.2026
- Bez poprawki
- 0
- Wykorzystywana w atakach
- 0
Rozkład istotności
- Średnia 5
- Niska 1
Ujawnienia w latach
- 2026: 6
-
Zatruwanie pamięci podręcznej w Nuxt OG Image poprzez możliwe do wyliczenia klucze na niepodpisanych trasach dynamicznych obrazów ten wpis
Dowiedz się, które podatności dotyczą Twojej aplikacji
Po podłączeniu integracji DockRay i włączeniu raportowania oprogramowania DockRay porównuje zgłoszone wersje komponentów ze znanymi podatnościami i powiadamia o potwierdzonych dopasowaniach. Zakres zależy od obsługiwanej technologii i dostępnych biuletynów.