Սովորաբար վտանգը մենք պատկերացնում ենք մեկ ուղղությամբ․ ով միանում է, նա էլ կառավարում է մյուս համակարգիչը։ IT մասնագետը TeamViewer-ով մտնում է աշխատակցի կամ հաճախորդի համակարգիչ, տեսնում է նրա էկրանը, շարժում է մկնիկը, ուղղում է խնդիրը։ Ռիսկը կարծես թե միայն այն կողմի համար է, որին միանում են։
CVE-2026-111585-ը շրջում է այս պատկերը։ TeamViewer-ի այս խոցելիության դեպքում վնասակար համակարգիչը կարող էր կոդ գործարկել հենց այն IT մասնագետի մոտ, որը միացել էր իրեն օգնելու։ Բավական էր, որ IT մասնագետը սեսիա հաստատեր այդ համակարգչի հետ։ Գաղտնաբառ գողանալ կամ լրացուցիչ որևէ բան սեղմել պետք չէր։
Խոցելիությունը գտել է Remedio ընկերության հետազոտող Օմրի Դարը (Omri Dar)։ TeamViewer-ն այն գնահատել է CVSS 8.8՝ High, և հոկտեմբերի 27-ին թողարկել է ուղղումը 15.83 տարբերակում։ Ըստ TeamViewer-ի պաշտոնական հաղորդագրության՝ հրապարակման պահին իրական հարձակումների մասին տեղեկություն չկար։
Ինչպես է TeamViewer-ը ցույց տալիս էկրանը
TeamViewer-ի սեսիայում երկու կողմ կա․
Host՝ այն համակարգիչը, որին միանում են։ Օրինակ՝ աշխատակցի նոութբուքը։
Viewer՝ այն համակարգիչը, որից միանում են։ Սա սովորաբար IT մասնագետի համակարգիչն է։
Host-ն անընդհատ ուղարկում է իր էկրանի պատկերը, իսկ viewer-ն այն ապակոդավորում ու ցույց է տալիս։ Սեսիայի սկզբում host-ը հայտնում է էկրանի պարամետրերը՝ լայնությունը, բարձրությունը և մեկ պիքսելի համար օգտագործվող բիթերի քանակը։ Viewer-ն այդ թվերով հաշվում է, թե պատկերի համար որքան հիշողություն պետք է հատկացնի։
Սովորաբար պատկերը փոխանցվում է AV1 կամ H.264 վիդեոկոդեկներով։ Եթե viewer-ի մոտ համապատասխան ապարատային ապակոդավորիչ չկա, TeamViewer-ն անցնում է ավելի պարզ՝ bitmap ճանապարհի։ Remedio-ի խոսքով՝ host-ը կարող է պարզապես հրաժարվել վիդեոկոդեկներից և այդպես viewer-ին ստիպել օգտագործել հենց այս ճանապարհը։ Իսկ սխալը հենց այստեղ էր։
Որտեղ էր սխալը
Viewer-ը չէր ստուգում, թե host-ի ուղարկած չափերն իրատեսական են, թե ոչ։ Պատկերի համար անհրաժեշտ հիշողության չափը հաշվվում էր 32-բիթանոց բազմապատկմամբ։ 32-բիթանոց թիվը կարող է պահել մինչև մոտ 4.29 միլիարդ արժեք։ Եթե արդյունքն ավելի մեծ է, թիվը «պտտվում» է և սկսում զրոյից, ինչպես հին մեքենայի վազքաչափը 999 999-ից հետո դառնում է 000 000։ Սա կոչվում է integer overflow։
Remedio-ի օրինակով՝ եթե host-ը հայտնում է, որ իր էկրանը 32 768 × 32 768 պիքսել է՝ 32 բիթ մեկ պիքսելի համար, ապա պատկերի համար անհրաժեշտ է մոտ 4.3 ԳԲ։ Բայց հետո viewer-ը հատկացնում է ընդամենը մոտ 4 ՄԲ։ Այդ բուֆերում տեղավորվում է պատկերի մոտ 31 տող, մինչդեռ viewer-ը կարծում է, որ այնտեղ 32 հազարից ավելի տող կա։
Հաջորդ սխալն այն էր, որ ստուգումներն արվում էին ըստ host-ի հայտարարած չափերի, ոչ թե իրականում հատկացված հիշողության։ Viewer-ը ստուգում էր՝ «այս պատկերի կտորը տեղավորվո՞ւմ է 32 768 × 32 768 էկրանում», պատասխանը «այո» էր, և տվյալները գրվում էին փոքր բուֆերից դուրս՝ հարևան հիշողության վրա։ Սա heap overflow է։
Պատկերացրեք՝ պահեստում 4 000 արկղի տեղ եք պատվիրում, բայց սխալի պատճառով ձեզ հատկացնում են ընդամենը 4 դարակ։ Բեռնողները ստուգում են միայն, որ արկղերի թիվը չանցնի 4 000-ը, և շարունակում են դրանք դնել հարևան դարակներին։
sequenceDiagram
participant V as Viewer (IT մասնագետ)
participant H as Host (հարձակվող)
V->>H: Սեսիայի սկիզբ
H->>V: Վիդեոկոդեկներից հրաժարում
Note over V: Անցում bitmap ճանապարհի
H->>V: Էկրանը 32 768 × 32 768 է
Note over V: Պետք է մոտ 4.3 ԳԲ, բայց գերլցումից հետո հատկացվում է մոտ 4 ՄԲ
H->>V: Էկրանի պատկերի կտորներ
Note over V: Ստուգումն արվում է ըստ հայտարարված չափերի
Note over V: Տվյալները գրվում են բուֆերից դուրսՍխեման պարզեցված է և հիմնված է Remedio-ի նկարագրության վրա։
Խափանումից մինչև կոդի կատարում
Ամենապարզ հետևանքը viewer-ի խափանումն է․ TeamViewer-ը IT մասնագետի մոտ հուսալիորեն փակվում է։ Բայց Remedio-ն ցույց է տվել, որ կարելի է ավելի հեռու գնալ։
Ըստ հետազոտողի՝ լիովին թարմացված client-ի և պաշտպանությունների պայմաններում հաջողվել է շրջանցել DEP-ը և CFG-ն ու հասնել WinExec ֆունկցիային, որը Windows-ում ծրագիր կամ հրաման է գործարկում։
DEP-ը (Data Execution Prevention) թույլ չի տալիս տվյալների համար նախատեսված հիշողությունը կատարել որպես կոդ։
CFG-ն (Control Flow Guard) ստուգում է, որ ծրագիրը անցում կատարի միայն թույլատրված ֆունկցիաների։
Այսինքն՝ IT մասնագետի համակարգչում հարձակվողի կոդը կգործարկվեր TeamViewer viewer-ի գործընթացի, այսինքն՝ IT մասնագետի օգտատիրոջ իրավունքներով։
Ցուցադրման ժամանակ հիշողության նախապատրաստման (heap grooming) քայլը փոխարինված է եղել host-ի կողմի «hook»-ով, որը վնասակար բայթերը տեղադրում է ցանցով եկող պատկերի կտորի փոխարեն։ Այնպես որ սա լաբորատոր ապացույց է, ոչ թե պատրաստի գործիք։ TeamViewer-ն իր հաղորդագրությունում ավելի զգուշավոր է․ ըստ ընկերության՝ սխալը կարող է բերել խափանման կամ, կախված պլատֆորմից, հնարավոր կոդի կատարման։
Ինչու է սա հատկապես վտանգավոր IT մասնագետների համար
IT մասնագետի համակարգիչը սովորական համակարգիչ չէ։ Դրանից սովորաբար հասանելի են բազմաթիվ այլ համակարգիչներ, ադմինիստրատորի գործիքներ, պահված գաղտնաբառեր, VPN և ներքին ցանց։ Այն վերցնելով՝ հարձակվողը կարող է ստանալ շատ ավելի մեծ հասանելիություն, քան մեկ աշխատակցի նոութբուքից։
Remedio-ն նկարագրում է հենց այս «հակառակ» ուղղությունը․ հարձակումը գալիս է այն համակարգչից, որին IT մասնագետը միանում է օգնելու։ Գործնականում կարելի է պատկերացնել առնվազն երկու սցենար․
Կեղծ դիմում։ Հարձակվողը ներկայանում է որպես աշխատակից կամ հաճախորդ, խնդրում է օգնել և տալիս է իր TeamViewer ID-ն։
Արդեն կոտրված համակարգիչ։ Հարձակվողն արդեն ներթափանցել է ընկերության մեկ աշխատատեղ և սպասում է, մինչև IT-ն միանա այն «ուղղելու»։ Այդպես նա կարող է անցնել ավելի մեծ իրավունքներ ունեցող համակարգչի։
flowchart LR
T["IT մասնագետի համակարգիչ (viewer)"] -->|"1. Միանում է օգնելու"| H["Վնասակար կամ կոտրված համակարգիչ (host)"]
H -->|"2. Վնասակար էկրանի տվյալներ"| T
T -->|"3. IT մասնագետի իրավունքներով հասանելիություն"| N["Այլ համակարգիչներ, գաղտնաբառեր, ներքին ցանց"]Հարձակման միակ պայմանը՝ IT մասնագետը պետք է սեսիա սկսի հարձակվողի վերահսկած համակարգչի հետ։ CVSS գնահատականում սա արտացոլված է որպես «անհրաժեշտ է օգտատիրոջ մասնակցություն» (UI:R)։ Բայց help desk-ի համար օտար համակարգչին միանալն առօրյա աշխատանք է, ոչ թե անսովոր գործողություն։
Սա առաջին անգամը չէ
Հեռակառավարման ծրագրերում «հակառակ» հարձակումները նոր գաղափար չեն։ 2019-ին Check Point-ը հրապարակեց Reverse RDP հետազոտությունը։ Այնտեղ 25 խոցելիություն էր գտնվել RDP-ի հայտնի client-ներում՝ rdesktop, FreeRDP և Microsoft-ի mstsc։ Դրանցից մի քանիսը վնասակար RDP սերվերին թույլ էին տալիս կոդ գործարկել իրեն միացող client-ի վրա։ Check Point-ը նույնպես առանձնացրել էր նույն սցենարը՝ IT աշխատակիցը միանում է վարակված աշխատատեղի, և հարձակվողն անցնում է նրա համակարգչին։
Դասը նույնն է․ հեռակառավարման client-ը մշակում է բարդ տվյալներ, որոնք գալիս են մյուս կողմից, և այդ տվյալներին չի կարելի վստահել։ Էկրանի պատկեր, clipboard, ֆայլեր և այս ամենը իհարկե հարձակման ճանապարհ է։









Comments (0)