46% ng mga pakete ng Python sa repositoryo ng PyPI ay naglalaman ng potensyal na hindi ligtas na code

Isang pangkat ng mga mananaliksik mula sa Unibersidad ng Turku (Finland) ang naglathala ng mga resulta ng pagsusuri ng mga pakete sa repositoryo ng PyPI para sa paggamit ng mga potensyal na mapanganib na mga konstruksyon na maaaring humantong sa mga kahinaan. Sa panahon ng pagsusuri ng 197 libong pakete, 749 libong potensyal na problema sa seguridad ang natukoy. 46% ng mga pakete ay may hindi bababa sa isang ganoong problema. Kabilang sa mga pinakakaraniwang problema ay ang mga pagkukulang na nauugnay sa paghawak ng exception at ang paggamit ng mga feature na nagpapahintulot sa pagpapalit ng code.

Sa 749 thousand na problemang natukoy, 442 thousand (41%) ang binansagang minor, 227 thousand (30%) ang moderate problems at 80 thousand (11%) ang delikado. Ang ilang mga pakete ay namumukod-tangi mula sa karamihan at naglalaman ng libu-libong mga problema: halimbawa, ang pakete ng PyGGI ay natukoy ang 2589 mga problema, pangunahing nauugnay sa paggamit ng "try-except-pass" na construct, at ang appengine-sdk package ay nakakita ng 2356 na mga problema. Ang isang malaking bilang ng mga problema ay naroroon din sa mga pakete ng genie.libs.ops, pbcore at genie.libs.parser.

Dapat tandaan na ang mga resulta ay nakuha batay sa awtomatikong static na pagsusuri, na hindi isinasaalang-alang ang konteksto ng aplikasyon ng ilang mga istraktura. Ang nag-develop ng bandit toolkit, na ginamit upang i-scan ang code, ay nagpahayag ng opinyon na dahil sa medyo mataas na bilang ng mga maling positibo, ang mga resulta ng pag-scan ay hindi maaaring direktang ituring na mga kahinaan nang walang karagdagang manu-manong pagsusuri ng bawat isyu.

Halimbawa, itinuturing ng analyzer na isang problema sa seguridad ang paggamit ng mga hindi mapagkakatiwalaang random number generator at hashing algorithm, gaya ng MD5, habang sa code ay maaaring gamitin ang mga naturang algorithm para sa mga layuning hindi makakaapekto sa seguridad. Itinuturing din ng analyzer na isang problema ang anumang pagpoproseso ng external na data sa mga hindi ligtas na function gaya ng pickle, yaml.load, subprocess at eval, ngunit ang paggamit na ito ay hindi nangangahulugang may kahinaan at sa katunayan ang paggamit ng mga function na ito ay maaaring ipatupad nang walang banta sa seguridad .

Kabilang sa mga pagsusulit na ginamit sa pag-aaral:

  • Paggamit ng mga potensyal na hindi ligtas na function na exec, mktemp, eval, mark_safe, atbp.
  • Hindi secure na setting ng mga karapatan sa pag-access para sa mga file.
  • Pag-attach ng socket ng network sa lahat ng mga interface ng network.
  • Paggamit ng mga password at key na mahigpit na tinukoy sa code.
  • Paggamit ng isang paunang natukoy na pansamantalang direktoryo.
  • Paggamit ng pass at magpatuloy sa catch-all-style exception handler;
  • Paglulunsad ng mga web application batay sa Flask web framework na pinagana ang debugging mode.
  • Paggamit ng hindi ligtas na mga pamamaraan ng deserialization ng data.
  • Gumagamit ng mga function ng hash ng MD2, MD4, MD5 at SHA1.
  • Paggamit ng mga hindi secure na DES cipher at encryption mode.
  • Paggamit ng hindi secure na pagpapatupad ng HTTPSConnection sa ilang bersyon ng Python.
  • Tinutukoy ang file:// scheme sa urlopen.
  • Paggamit ng pseudorandom number generators kapag nagsasagawa ng mga cryptographic na gawain.
  • Gamit ang Telnet protocol.
  • Paggamit ng mga hindi secure na XML parser.

Bukod pa rito, mapapansing 8 malisyosong pakete ang nakita sa direktoryo ng PyPI. Bago alisin, ang mga problemang pakete ay na-download nang higit sa 30 libong beses. Upang itago ang malisyosong aktibidad at i-bypass ang mga babala mula sa mga simpleng static analyzer sa mga pakete, ang mga bloke ng code ay na-encode gamit ang Base64 at isinagawa pagkatapos ng pag-decode gamit ang isang eval na tawag.

Ang mga noblesse, genesisbot, ay, nagdurusa, noblesse2 at noblessev2 na mga pakete ay naglalaman ng code upang maharang ang mga numero ng credit card at password na naka-imbak sa mga browser ng Chrome at Edge, pati na rin ang paglilipat ng mga token ng account mula sa Discord application at pagpapadala ng data ng system, kabilang ang mga screenshot ng mga nilalaman ng screen . Kasama sa mga pakete ng pytagora at pytagora2 ang kakayahang mag-load at mag-execute ng third-party executable code.

Pinagmulan: opennet.ru

Magdagdag ng komento