Flater yn GPSD dizze snein fertaalt nei in tiidferoaring fan 19 jier lyn

In kritysk probleem is identifisearre yn it GPSD-pakket, dat wurdt brûkt om krekte tiid- en posysjegegevens fan GPS-apparaten te ekstrahearjen, wêrtroch't de tiid op 24 oktober 1024 wiken werom sil, d.w.s. de tiid wurdt feroare yn maart 2002. It probleem ferskynt yn releases 3.20 oant 3.22 ynklusyf en wurdt oplost yn GPSD 3.23. Alle brûkers fan systemen dy't GPSD brûke moatte updates fuortendaliks ynstallearje, of wurde taret op mislearring.

It effekt fan 'e flater kin liede ta ûnfoarspelbere flaters op ferskate systemen, ynklusyf dyjingen dy't net direkt GPSD brûke, om't dizze applikaasje wurdt brûkt om krekte tiidgegevens te krijen op guon NTP-tsjinners dy't brûkt wurde foar tiidsyngronisaasje. As tiidferskowingen foarkomme yn systemen, kinne problemen ûntstean mei autentikaasje (bygelyks ienmalige wachtwurden, Kerberos en oare tagongsferifikaasjemeganismen dy't in ferfaldatum hawwe sille net mear wurkje), mei sertifikaatferifikaasje, en mei berekkeningen dy't tiidbereiken manipulearje ( bygelyks it berekkenjen fan de tiid fan in sesje fan in brûker). GPSD is ek beskikber op in ferskaat oan ynbêde en mobile apparaten, wêrfan in protte gjin firmware-updates mear ûntfange.

It GPS-protokol omfettet in wiketeller dy't de wiken telt sûnt 5 jannewaris 1980. It probleem is dat by it útstjoeren mar 10 bits wurde tawiisd foar dizze teller, wat betsjut dat it elke 1023 wiken (19.7 jier) oerstreamt. De earste oerstreaming barde yn 1999, de twadde yn 2019, en de tredde sil plakfine yn 2038. Dizze eveneminten wurde kontrolearre troch fabrikanten en spesjale handlers wurde foar har levere. Op it stuit is parallel in nij GPS-berjochtformaat (CNAV) yntrodusearre, wêryn 13 bits wurde tawiisd foar de teller (d.w.s. in oerstream wurdt allinich yn 2137 ferwachte).

Yn GPSD, yn 'e logika foar it oanpassen fan it uterlik fan in ekstra sekonde (tafoege om de referinsje atoomklokken fan' e wrâld te syngronisearjen mei de astronomyske tiid fan 'e ierde), waard in flater makke wêrtroch't op 24 oktober 2021, 1024 te betiid fan 'e wike teller. Neffens de skriuwer fan 'e koade soe de ferskowing op 31 desimber 2022 plakfine moatte, mar de oersetting fan dizze datum yn it oantal wiken waard net goed útfierd en yn feite foel it oantal wiken dat yn 'e kontrôle opjûn waard ûnder oktober 2021 (de wearde oanjûn is 2180 ynstee fan 2600). /* Sanity check wikenûmer, GPS-epoch, tsjin skrikkelsekonden * Wurket net goed mei regressions, om't de leap_sconds * fan 'e ûntfanger wêze kinne, of fan BUILD_LEAPSECONDS. */ if (0 < session->context->leap_seconds && 19> session->context->leap_seconds && 2180 < wike) { /* oannimme leap second = 19 troch 31 Dec 2022 * dus wike > 2180 is in manier yn 'e takomst , lit it net tastean */ wike -= 1024; GPSD_LOG(LOG_WARN, &session->context->errout, "GPS wike betizing. Oanpast wike %u foar sprong %d\n", wike, sesje->kontekst->leap_seconds); }

Boarne: opennet.ru

Add a comment