Biblioteka USC iLab cereal do wersji 1.3.0 włącznie zawiera błąd w mechanizmie cachowania wskaźników std::shared_ptr, który może prowadzić do nieprawidłowej serializacji danych. W zależności od kontekstu użycia konsekwencje mogą być poważne i trudne do przewidzenia.
▸ Pokaż oryginał (EN)
An issue was discovered in USC iLab cereal through 1.3.0. It employs caching of std::shared_ptr values, using the raw pointer address as a unique identifier. This becomes problematic if an std::shared_ptr variable goes out of scope and is freed, and a new std::shared_ptr is allocated at the same address. Serialization fidelity thereby becomes dependent upon memory layout. In short, serialized std::shared_ptr variables cannot always be expected to serialize back into their original values. This can have any number of consequences, depending on the context within which this manifests.
Biblioteka cereal używa surowego adresu wskaźnika (raw pointer address) jako unikalnego identyfikatora przy cachowaniu obiektów std::shared_ptr. Problem pojawia się, gdy obiekt std::shared_ptr wychodzi poza zakres widoczności i jest zwalniany, a następnie nowy obiekt std::shared_ptr zostaje przydzielony pod tym samym adresem w pamięci. W takiej sytuacji mechanizm serializacji błędnie utożsamia nowy obiekt z poprzednim, co powoduje, że poprawność serializacji zależy od układu pamięci w danym momencie wykonania programu. Efektem jest to, że zserializowane zmienne std::shared_ptr po deserializacji nie zawsze odtwarzają swoje oryginalne wartości.
Atakujący lub niekontrolowane warunki środowiskowe mogą doprowadzić do naruszenia integralności, poufności lub dostępności danych przetwarzanych przez aplikację korzystającą z biblioteki, w zależności od kontekstu jej użycia (CWE-763: użycie zwolnionego wskaźnika będącego prawidłowym obiektem).
Należy zastosować patche dostępne u producenta zgodnie z referencjami. Zaleca się śledzenie repozytorium projektu na GitHub (USCiLab/cereal) w celu uzyskania poprawionej wersji biblioteki.
USC iLab cereal w wersjach do 1.3.0 włącznie
Podatność została zgłoszona w ramach issue #636 w repozytorium GitHub projektu USCiLab/cereal. Pomimo wysokiego wyniku CVSS 9.8, realny wpływ jest silnie zależny od kontekstu użycia biblioteki w konkretnej aplikacji.
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:HUsc Cereal
APPUsc≤ 1.3.0