
VSCode-ის ბაგი: ერთი დაწკაპუნებით GitHub-ის ტოკენის მოპარვა
მკვლევარმა აღწერა იერიში, რომლის დროსაც ბმულზე ერთი დაწკაპუნებით შესაძლებელია GitHub-ის ტოკენის მოპარვა — მათ შორის კერძო რეპოზიტორიებზე წვდომით; პრობლემა VSCode-ის ვებ-ვერსიაშია, Microsoft-მა გამოსწორება 3 ივნისს გამოუშვა.
უსაფრთხოების მკვლევარმა გამოაქვეყნა იერიშის დეტალები, რომლის დროსაც ბმულზე ერთი დაწკაპუნებით შესაძლებელია GitHub-ის წვდომის ტოკენის მოპარვა — ტოკენისა, რომელსაც მომხმარებლის რეპოზიტორიებზე, მათ შორის კერძო რეპოზიტორიებზე, წაკითხვისა და ჩაწერის უფლება აქვს. აღწერა გამოქვეყნდა მკვლევარის ბლოგზე და VSCode-ის ხარვეზების ტრეკერზე 2 ივნისს.
ხარვეზი იზოლაციაში
სამიზნე github.dev-ია — GitHub-ის ბრაუზერული რედაქტორი: ნებისმიერი რეპოზიტორიის იქ გახსნისას github.com ვებ-აპლიკაციას გადასცემს OAuth ტოკენს. ეს ტოკენი არ არის შემოფარგლული იმ რეპოზიტორიით, რომელიც გახსენით, ამიტომ ის წვდომას იძლევა ყველა სხვა რეპოზიტორიაზე, რომელზეც ავტორიზებულ მომხმარებელს წვდომა აქვს. VSCode ჩვეულებრივ თავის webview-ებში (Markdown-ის წინასწარი გადახედვა, Jupyter-ის ნოუთბუქები) გაშვებულ კოდს ცალკე წარმოშობის iframe-ში იზოლირებს. ხარვეზი ისაა, რომ webview-ები კლავიატურის მოვლენებს მშობელ ფანჯარას VSCode-ის შეტყობინებების API-ით გადასცემენ, ამიტომ არასანდო webview-ში მომუშავე სკრიპტს შეუძლია ისეთი კლავიშების დაჭერის სიმულაცია მოახდინოს, რომლებსაც რედაქტორი მომხმარებლისგან მოსულად აღიქვამს.
ნოუთბუქის უჯრიდან — მოპარულ ტოკენამდე
დემონსტრაციას მხოლოდ რეპოზიტორია სჭირდება, რომელშიც Jupyter-ის ნოუთბუქი და „ლოკალური სამუშაო სივრცის გაფართოება“ (local workspace extension) დევს. Markdown-ის უჯრა, რომლის სურათის ტეგის onerror დამმუშავებელი JavaScript-ს უშვებს, იწყებს ჯაჭვს: სკრიპტი ელოდება VSCode-ის შეტყობინებას რეკომენდებული გაფართოებების შესახებ, აგზავნის Ctrl+Shift+A-ს მისი ძირითადი მოქმედების დასადასტურებლად და აყენებს ლოკალურ გაფართოებას — გზას, რომელიც გამომქვეყნებლის ნდობის შემოწმებას გვერდს უვლის, რადგან სამუშაო სივრცე თავად ითვლება სანდოდ. შემდეგ ეს გაფართოება ამატებს საკუთარ კლავიშთა კომბინაციას, რომელიც იძახებს ბრძანებას არჩეული გაფართოების ბაზრიდან დაყენების შესახებ გამომქვეყნებლის შემოწმების გამოტოვებით; ეს უკანასკნელი კითხულობს GitHub-ის ტოკენს და ითხოვს api.github.com/user/repos-ს, რითაც აჩვენებს კერძო რეპოზიტორიებს, რომლებზეც ტოკენს წვდომა აქვს. იგივე ხარვეზი არსებობს VSCode-ის დესკტოპურ ვერსიაშიც, თუმცა მისი გამოყენება უფრო რთულია: მსხვერპლმა რეპოზიტორია უნდა დააკლონოს და ნოუთბუქი გახსნას, ხოლო webview-ში XSS ხარვეზთან ერთად ეს უკვე კოდის დისტანციურ შესრულებას ნიშნავს.
გამოსწორება და რჩევები
Microsoft-მა 3 ივნისს დროებითი გამოსწორება გამოუშვა: ვებ-რედაქტორში ნოუთბუქის გახსნისას დასტურის ნაბიჯი დაემატა და ბრძანებებს გამომქვეყნებლის ნდობის გვერდის ავლის საშუალება აღარ აქვთ. იმავე დღეს გამოვიდა უფრო სრული გამოსწორება, რომელიც ნოუთბუქის webview-ებიდან keydown მოვლენების გავრცელებას წყვეტს. მომხმარებლებს, რომლებსაც github.dev არასოდეს გაუხსნიათ, ურჩევენ წაშალონ მისი cookies და საიტის მონაცემები; საწყისი ავტორიზაციის ფანჯრის გავლის შემდეგ, როგორც მკვლევარი აღნიშნავს, რედაქტორს CSRF ტოკენები არ იცავს, ამიტომ ინტერნეტში არსებულ ნებისმიერ ბმულს შეუძლია ბრაუზერი ამ იერიშისკენ გადაამისამართოს. ავტორი ასევე აღნიშნავს VSCode-ის დაცვის სიღრმის მიდგომის დამსახურებას — მკაცრი უსაფრთხოების პოლიტიკა და Markdown-ის გაწმენდა — ზიანის შეზღუდვაში და ხსნის საჯარო გამჟღავნების გადაწყვეტილებას: ადრინდელი შეტყობინება ჩუმად, კრედიტის გარეშე გამოსწორდა.
SiTech — AI-გაძლიერებული ვებ დეველოპმენტი
ვქმნით სწრაფ, თანამედროვე ვებსაიტებს და AI-ს ვაერთიანებთ ქართული ბიზნესებისთვის. გაქვთ პროექტი ან კითხვა? სიამოვნებით დაგეხმარებით.