CVE-2026-44522
WysokieCVSS 8.6Prawdopodobieństwo exploitacji (EPSS)
Niskie ryzykoPercentyl 42 - wyżej niż 42% wszystkich znanych CVE
Streszczenie
W Note Mark od wersji 0.13.0 do przed 0.19.4 nazwa pliku zasobu przesyłanego przez uwierzytelnionego użytkownika (nagłówek X-Name) jest zapisywana w bazie bez walidacji, co pozwala na sekwencje przejścia katalogów. Podczas eksportu CLI nazwa ta trafia do `filepath.Join()` i `os.Create()`, umożliwiając zapis plików w dowolnych lokalizacjach w systemie plików.
Ocena ryzyka
Atakujący może nadpisać lub utworzyć pliki poza katalogiem eksportu, co może prowadzić do uszkodzenia danych lub wykonania kodu, jeśli nadpisane zostaną krytyczne pliki.
Rekomendacja
Zaktualizuj Note Mark do wersji 0.19.4 lub nowszej. Do czasu aktualizacji ogranicz możliwość przesyłania zasobów przez użytkowników i przeprowadzaj eksporty w kontrolowanym środowisku.
Inne podatności w Note Mark
Zobacz wszystkie- 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.
- CVE-2026-50553Wysokie
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.
- 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-41572Średnie
Note Mark to aplikacja do robienia notatek. W wersjach przed 0.19.3 po miękkim usunięciu publicznej książki przez właściciela, jej notatki i przesłane zasoby pozostają czytelne pod /api/notes/{id}, /api/notes/{id}/content, adresem slug i endpointami zasobów. Nieuwierzytelnieni użytkownicy posiadający ID notatki lub ścieżkę slug zachowują dostęp. Zakres miękkiego usuwania GORM nie obejmuje surowych klauzul "JOIN books ..." używanych w zapytaniach o notatki i zasoby.
- CVE-2026-40265Średnie
W Note Mark w wersjach 0.19.1 i wcześniejszych endpoint /api/notes/{noteID}/assets/{assetID} nie wymaga uwierzytelnienia, a zapytanie backendu nie weryfikuje własności ani widoczności notatki. Nieuwierzytelniony użytkownik znający identyfikatory notatki i zasobu może pobrać pełną zawartość prywatnych zasobów notatki.
- CVE-2026-40263Niskie
W aplikacji Note Mark w wersjach 0.19.1 i wcześniejszych endpoint logowania wykonuje weryfikację hasła bcrypt tylko dla istniejących nazw użytkowników, zwracając natychmiast dla nieistniejących. Ta różnica czasu odpowiedzi pozwala nieuwierzytelnionym atakującym wyliczać prawidłowe nazwy użytkowników. Problem naprawiono w wersji 0.19.2.
Oryginalny opis (angielski, źródło NVD)
Note Mark is an open-source note-taking application. From 0.13.0 to before 0.19.4, the Note Mark application allows authenticated users to upload assets to notes via POST /api/notes/{noteID}/assets, where the asset filename is provided through the X-Name HTTP request header. This value is stored directly in the database without any sanitization or validation - no path separator filtering, no directory traversal sequence rejection, and no use of filepath.Base() to strip directory components. The unsanitized name is persisted as-is in the note_assets table (Name column, varchar(80)). When an administrator subsequently runs the data export CLI commands (note-mark migrate export-v1 or note-mark migrate export), the stored asset name is passed directly into filepath.Join() and path.Join() calls as part of the output file path argument to os.Create(). Since Go's filepath.Join() resolves ../ sequences during path normalization, an attacker-controlled asset name containing directory traversal sequences causes the export process to write files to arbitrary locations on the filesystem, completely outside the intended export directory. This vulnerability is fixed in 0.19.4.
Dane podatności pochodzą z NVD (NIST) · CISA KEV · EPSS

