CVE-2022-24826
Təsvir
Windows əməliyyat sistemində, əgər Git LFS tərkibində həm `..exe` faylı, həm də `git.exe` adlı fayl olan zərərli repozitoriya ilə işləyirsə və `git.exe` `PATH`-də tapılmırsa, `..exe` proqramı icra olunacaq ki, bu da hücumçuya ixtiyari kodun icrasına imkan verəcəkdir. Bu, Unix sistemlərinə təsir etmir. Eynilə, əgər zərərli repozitoriya `..exe` və `cygpath.exe` adlı faylları ehtiva edirsə və `cygpath.exe` `PATH`-də tapılmırsa, müəyyən Git LFS əmrləri icra edildikdə `..exe` proqramı işə düşəcəkdir. Daha ümumi şəkildə, əgər cari işçi kataloqda baza adı `.` olan və `PATHEXT`-dən hər hansı bir fayl genişlənməsinə (`.bat` və `.cmd` istisna olmaqla) malik fayl, həmçinin Git LFS-in icra etmək istədiyi proqramla (məsələn, `git`, `cygpath` və ya `uname) eyni baza adına və `PATHEXT`-dən hər hansı bir fayl genişlənməsinə (o cümlədən `.bat` və `.cmd`) malik digər bir fayl varsa, Windows-da Git LFS həmin proqramı icra etməyə çalışdıqda, yalnız həmin proqram `PATH`-də sadalanmış heç bir kataloqda tapılmadıqda, onun əvəzinə `..exe`, `..com` və s. faylı icra olunacaqdır. Zəiflik ondan qaynaqlanır ki, Git LFS icra etmək istədiyi proqramın `PATH`-də sadalanmış heç bir kataloqda olmadığını aşkar etdikdə, Go `os/exec` paketinə icra edilə bilən fayl yolu kimi boş sətir ötürür; bu paketdə isə belə bir xəta var ki, Windows-da o, yol ayırıcısı əlavə etmədən boş sətrin önünə cari işçi kataloqun adını (yəni `.`) əlavə edir və nəticədə həmin kataloqda baza adı `.` olan və `PATHEXT`-dən hər hansı bir genişlənməyə malik ilk tapılan faylı icra edir. (`..bat` və `..cmd` fayllarının eyni şəkildə icra edilməməsinin səbəbi budur ki, Go `os/exec` paketi onları `..exe` faylı kimi icra etməyə çalışsa da, Microsoft Win32 API `CreateProcess()` funksiyaları ailəsinin sənədləşdirilməmiş bir xüsusiyyəti var: onlar çağıranın toplu skript faylını icra etməyə çalışdığını anlayırlar və bunun əvəzinə bütün komanda sətri arqumentlərini parametr kimi ötürərək `cmd.exe` komanda interpretatorunu işə salırlar. Bunlar Git LFS tərəfindən təyin edilmiş komanda sətri arqumentləri ilə eynidir və buna görə də, hədəf proqramın adı birinci gəlir və nəticədə `cmd.exe /c git` kimi bir komanda sətri yaranır ki, bu da uğursuz olur.) Git LFS, proqram `PATH`-də sadalanmış heç bir kataloqda tapılmadıqda, Go `os/exec` paketinə boş sətir ötürmək əvəzinə həmişə xəta bildirməklə bu zəifliyi aradan qaldırmışdır. Go `os/exec` paketindəki xəta Go layihəsinə bildirilmişdir və bu təhlükəsizlik məsləhəti dərc edildikdən sonra düzəldilməsi gözlənilir. Problem 2.12.1 versiyasında ortaya çıxmış və 3.1.3 versiyasında düzəldilmişdir. Təsirə məruz qalan versiyalardan istifadə edənlər 3.1.3 versiyasına yüksəltmə etməlidirlər. Hazırda məlum olan alternativ həll yolları yoxdur.
Necə düzəltmək olar
- git_large_file_storage_project git_large_file_storage3.1.3 və ya daha yeni versiya
- github.com/git-lfs/git-lfs/v33.1.3 və ya daha yeni versiya
Təsirlənən məhsullar
| Məhsul | Təsirlənən versiyalar | Düzəldildiyi versiya |
|---|---|---|
| git_large_file_storage_project git_large_file_storage | 2.12.1 ≤ v < 3.1.3 | 3.1.3 |
| github.com/git-lfs/git-lfs/v3Go | 3.0.0 ≤ v < 3.1.3 | 3.1.3 |
| github.com/git-lfs/git-lfsGo | 2.12.1 ≤ v | — |
Versiyanızı yoxlayın
Məhsulu seçin və istifadə etdiyiniz versiyanı yazın; versiyanın təsirlənən aralıqda olub-olmadığını görün.
Attack Surface Management
Domenlərinizə bağlı aktivləri, onlarda işləyən texnologiyaları və məlum zəiflikləri bir siyahıda görün.