Το 46% των πακέτων Python στο αποθετήριο PyPI περιέχουν δυνητικά μη ασφαλή κώδικα

Μια ομάδα ερευνητών από το Πανεπιστήμιο του Turku (Φινλανδία) δημοσίευσε τα αποτελέσματα μιας ανάλυσης πακέτων στο αποθετήριο 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.

Θα πρέπει να σημειωθεί ότι τα αποτελέσματα προέκυψαν με βάση αυτοματοποιημένη στατική ανάλυση, η οποία δεν λαμβάνει υπόψη το πλαίσιο εφαρμογής ορισμένων δομών. Ο προγραμματιστής του κιτ εργαλείων bandit, το οποίο χρησιμοποιήθηκε για τη σάρωση του κώδικα, εξέφρασε την άποψη ότι λόγω του αρκετά μεγάλου αριθμού ψευδών θετικών αποτελεσμάτων, τα αποτελέσματα σάρωσης δεν μπορούν να θεωρηθούν άμεσα τρωτά σημεία χωρίς πρόσθετη μη αυτόματη εξέταση κάθε ζητήματος.

Για παράδειγμα, ο αναλυτής θεωρεί ότι η χρήση αναξιόπιστων γεννητριών τυχαίων αριθμών και αλγορίθμων κατακερματισμού, όπως το MD5, είναι πρόβλημα ασφαλείας, ενώ στον κώδικα τέτοιοι αλγόριθμοι μπορούν να χρησιμοποιηθούν για σκοπούς που δεν επηρεάζουν την ασφάλεια. Ο αναλυτής θεωρεί επίσης πρόβλημα οποιαδήποτε επεξεργασία εξωτερικών δεδομένων σε μη ασφαλείς λειτουργίες όπως pickle, yaml.load, subprocess και eval, αλλά αυτή η χρήση δεν συνεπάγεται απαραιτήτως ευπάθεια και στην πραγματικότητα η χρήση αυτών των λειτουργιών μπορεί να υλοποιηθεί χωρίς απειλή ασφαλείας .

Μεταξύ των δοκιμών που χρησιμοποιήθηκαν στη μελέτη:

  • Χρήση δυνητικά μη ασφαλών συναρτήσεων exec, mktemp, eval, mark_safe κ.λπ.
  • Μη ασφαλής ρύθμιση δικαιωμάτων πρόσβασης για αρχεία.
  • Σύνδεση υποδοχής δικτύου σε όλες τις διεπαφές δικτύου.
  • Χρήση κωδικών πρόσβασης και κλειδιών που καθορίζονται αυστηρά στον κώδικα.
  • Χρησιμοποιώντας έναν προκαθορισμένο προσωρινό κατάλογο.
  • Χρησιμοποιώντας πάσο και συνέχεια σε χειριστές εξαιρέσεων catch-all-style.
  • Εκκίνηση εφαρμογών Ιστού που βασίζονται στο πλαίσιο Ιστού Flask με ενεργοποιημένη τη λειτουργία εντοπισμού σφαλμάτων.
  • Χρήση μη ασφαλών μεθόδων αποσειριοποίησης δεδομένων.
  • Χρησιμοποιεί συναρτήσεις κατακερματισμού MD2, MD4, MD5 και SHA1.
  • Χρήση μη ασφαλών κρυπτογράφησης DES και τρόπων κρυπτογράφησης.
  • Χρήση μιας μη ασφαλούς υλοποίησης HTTPSConnection σε ορισμένες εκδόσεις της Python.
  • Καθορισμός του σχήματος file:// στο urlopen.
  • Χρήση γεννητριών ψευδοτυχαίων αριθμών κατά την εκτέλεση κρυπτογραφικών εργασιών.
  • Χρησιμοποιώντας το πρωτόκολλο Telnet.
  • Χρησιμοποιώντας μη ασφαλείς αναλυτές XML.

Επιπλέον, μπορεί να σημειωθεί ότι εντοπίστηκαν 8 κακόβουλα πακέτα στον κατάλογο PyPI. Πριν από την αφαίρεση, τα προβληματικά πακέτα λήφθηκαν περισσότερες από 30 χιλιάδες φορές. Για την απόκρυψη κακόβουλης δραστηριότητας και την παράκαμψη προειδοποιήσεων από απλούς στατικούς αναλυτές σε πακέτα, τα μπλοκ κώδικα κωδικοποιήθηκαν χρησιμοποιώντας το Base64 και εκτελέστηκαν μετά την αποκωδικοποίηση χρησιμοποιώντας μια κλήση eval.

Τα πακέτα noblesse, genesisbot, are, suffer, noblesse2 και noblessev2 περιέχουν κώδικα για την υποκλοπή αριθμών πιστωτικών καρτών και κωδικών πρόσβασης που είναι αποθηκευμένοι σε προγράμματα περιήγησης Chrome και Edge, καθώς και μεταφορά διακριτικών λογαριασμών από την εφαρμογή Discord και αποστολή δεδομένων συστήματος, συμπεριλαμβανομένων στιγμιότυπων οθόνης του περιεχομένου της οθόνης . Τα πακέτα pytagora και pytagora2 περιλάμβαναν τη δυνατότητα φόρτωσης και εκτέλεσης εκτελέσιμου κώδικα τρίτων.

Πηγή: opennet.ru

Προσθέστε ένα σχόλιο