Տուրկուի (Ֆինլանդիա) համալսարանի մի խումբ հետազոտողներ հրապարակել են PyPI պահեստի փաթեթների վերլուծության արդյունքները՝ պոտենցիալ վտանգավոր կոնստրուկտների օգտագործման համար, որոնք կարող են հանգեցնել խոցելիության: 197 հազար փաթեթների վերլուծության ընթացքում բացահայտվել է անվտանգության 749 հազար պոտենցիալ խնդիր։ Փաթեթների 46%-ն ունի առնվազն մեկ նման խնդիր։ Ամենատարածված խնդիրներից են բացառությունների հետ կապված թերությունները և կոդերի փոխարինումը թույլ տվող գործառույթների օգտագործումը:
Հայտնաբերված 749 հազար խնդիրներից 442 հազարը (41%) պիտակավորվել է որպես աննշան, 227 հազարը (30%)՝ միջին ծանրության և 80 հազարը (11%)՝ վտանգավոր։ Որոշ փաթեթներ առանձնանում են ամբոխից և պարունակում են հազարավոր խնդիրներ. օրինակ, PyGGI փաթեթը հայտնաբերել է 2589 խնդիր, որոնք հիմնականում կապված են «try-except-pass» կառուցվածքի օգտագործման հետ, իսկ appengine-sdk փաթեթը գտել է 2356 խնդիր: Մեծ թվով խնդիրներ կան նաև genie.libs.ops, pbcore և genie.libs.parser փաթեթներում:
Հարկ է նշել, որ արդյունքները ստացվել են ավտոմատացված ստատիկ վերլուծության հիման վրա, որը հաշվի չի առնում որոշակի կառույցների կիրառման համատեքստը։ Ավազակային գործիքակազմի մշակողը, որն օգտագործվել է կոդը սկանավորելու համար, կարծիք է հայտնել, որ կեղծ պոզիտիվների բավականին մեծ քանակի պատճառով սկանավորման արդյունքները չեն կարող ուղղակիորեն խոցելի լինել առանց յուրաքանչյուր հարցի լրացուցիչ ձեռքով վերանայման:
Օրինակ, անալիզատորը համարում է անվստահելի պատահական թվերի գեներատորների և հեշավորման ալգորիթմների օգտագործումը, ինչպիսին է MD5-ը, որպես անվտանգության խնդիր, մինչդեռ կոդում նման ալգորիթմները կարող են օգտագործվել անվտանգությանը չազդող նպատակներով: Անալիզատորը նաև խնդիր է համարում արտաքին տվյալների ցանկացած մշակումը ոչ անվտանգ գործառույթներով, ինչպիսիք են pickle, yaml.load, subprocess և eval, բայց այս օգտագործումը պարտադիր չէ, որ ներառում է խոցելիություն, և իրականում այդ գործառույթների օգտագործումը կարող է իրականացվել առանց անվտանգության սպառնալիքի: .
Ուսումնասիրության մեջ օգտագործված թեստերի թվում.
- Օգտագործելով պոտենցիալ ոչ անվտանգ գործառույթներ exec, mktemp, eval, mark_safe և այլն:
- Ֆայլերի մուտքի իրավունքների անապահով կարգավորում:
- Ցանցային վարդակից միացնելով բոլոր ցանցային ինտերֆեյսներին:
- Կոդում խստորեն նշված գաղտնաբառերի և ստեղների օգտագործումը:
- Օգտագործելով նախապես սահմանված ժամանակավոր գրացուցակ:
- Օգտագործելով անցում և շարունակություն catch-all-style բացառությունների մշակիչներում;
- Վեբ հավելվածների գործարկում Flask վեբ շրջանակի վրա հիմնված վրիպազերծման ռեժիմով միացված:
- Օգտագործելով տվյալների ապասերիալացման ոչ անվտանգ մեթոդներ:
- Օգտագործում է MD2, MD4, MD5 և SHA1 հեշ գործառույթները:
- Անապահով DES ծածկագրերի և գաղտնագրման ռեժիմների օգտագործում:
- Python-ի որոշ տարբերակներում անապահով HTTPSConnection ներդրման օգտագործումը:
- Նշելով file:// սխեման urlopen-ում:
- Կեղծ պատահական թվերի գեներատորների օգտագործումը գաղտնագրման առաջադրանքներ կատարելիս:
- Օգտագործելով Telnet արձանագրությունը:
- Օգտագործելով անապահով XML վերլուծիչներ:
Բացի այդ, կարելի է նշել, որ PyPI գրացուցակում հայտնաբերվել է 8 վնասակար փաթեթ։ Մինչ հեռացումը խնդրահարույց փաթեթները ներբեռնվել են ավելի քան 30 հազար անգամ։ Վնասակար գործողությունները թաքցնելու և փաթեթներում պարզ ստատիկ անալիզատորներից զգուշացումները շրջանցելու համար կոդերի բլոկները կոդավորվեցին Base64-ի միջոցով և գործարկվեցին ապակոդավորումից հետո՝ օգտագործելով eval call:
Noblesse, genesisbot, are, suffer, noblesse2 և noblessev2 փաթեթները պարունակում են կոդ՝ Chrome և Edge բրաուզերներում պահվող կրեդիտ քարտերի համարներն ու գաղտնաբառերը հայտնաբերելու համար, ինչպես նաև Discord հավելվածից հաշվի նշաններ փոխանցելու և համակարգի տվյալները, ներառյալ էկրանի բովանդակության սքրինշոթերը: pytagora և pytagora2 փաթեթները ներառում էին երրորդ կողմի գործարկվող կոդ բեռնելու և գործարկելու հնարավորություն:
Source: opennet.ru