CVE-2026-50553
WysokieCVSS 8.6Streszczenie
Note Mark przed wersją 0.19.5 nieprawidłowo waliduje wartości slug, ponieważ wzorzec OpenAPI/huma nie jest zakotwiczony, co pozwala na akceptację ścieżek zawierających segmenty ../. Komendy eksportu danych używają tych slugów do tworzenia plików poza katalogiem eksportu, co może prowadzić do zapisu plików z uprawnieniami roota.
Ocena ryzyka
Atakujący może wykorzystać tę podatność do zapisu plików w dowolnej lokalizacji systemu plików z uprawnieniami roota, co może prowadzić do pełnego przejęcia systemu.
Rekomendacja
Zaleca się aktualizację Note Mark do wersji 0.19.5 lub nowszej, która naprawia tę podatność.
Inne podatności w Note Mark
Zobacz wszystkie- CVE-2026-50554Średnie
Note Mark to aplikacja do notatek o otwartym kodzie źródłowym. Przed wersją 0.19.5, GET /api/books/{bookID}/notes jest nieuwierzytelnionym punktem końcowym, który akceptuje parametr zapytania "deleted". Gdy żądanie ma ?deleted=true, usługa wykonuje zapytanie z Unscoped() (omijając zakres miękkiego usuwania GORM), ale zachowuje klauzulę autoryzacji odczytu jako "owner_id = ? OR is_public = ?". W rezultacie każdy nieuwierzytelniony wywołujący może wyliczyć metadane miękko usuniętych ("przeniesionych do kosza") notatek należących do dowolnej publicznej książki — notatek, które właściciel jawnie usunął i oczekiwał, że zostaną usunięte z widoku publicznego.
- CVE-2026-44523Krytyczne
Aplikacja Note Mark przed wersją 0.19.4 nie wymusza minimalnej długości ani entropii dla wartości konfiguracyjnej JWT_SECRET. Umożliwia to akceptację dowolnego sekretu kodowanego w base64, w tym sekretów o długości zaledwie 1 bajta.
Oryginalny opis (angielski, źródło NVD)
Note Mark is an open-source note-taking application. Prior to version 0.19.5, Note Mark validates book and note slug values with the OpenAPI/huma tag pattern:"[a-z0-9-]+". huma compiles this with regexp.MustCompile(s.Pattern) and tests it with patternRe.MatchString(str), an UNANCHORED match. Because the pattern is not anchored (^...$), any string that merely CONTAINS one [a-z0-9-] substring passes validation. A slug such as ../../../../../../tmp/escape is accepted and stored verbatim. The data-export CLI commands (note-mark migrate export and note-mark migrate export-v1) join these unsanitized slugs straight into the output path with path.Join / filepath.Join, then os.MkdirAll the directory and os.Create the note file. path.Join resolves the ../ segments, so the note content file is written OUTSIDE the configured export directory. The export process commonly runs as root (default in Docker / bare-metal admin usage), so this is a root-privilege arbitrary directory create + file write. This issue has been patched in version 0.19.5.

