PyPI-ի պահոցում Python փաթեթների 46%-ը պարունակում է պոտենցիալ անապահով կոդ

Տուրկուի (Ֆինլանդիա) համալսարանի մի խումբ հետազոտողներ հրապարակել են 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

Добавить комментарий