Μια επίθεση στο NPM που σας επιτρέπει να προσδιορίσετε την παρουσία πακέτων σε ιδιωτικά αποθετήρια

Εντοπίστηκε ένα ελάττωμα στο NPM που σας επιτρέπει να ανιχνεύσετε την ύπαρξη πακέτων σε κλειστά αποθετήρια. Το πρόβλημα προκαλείται από διαφορετικούς χρόνους απόκρισης όταν ζητάτε ένα υπάρχον και ανύπαρκτο πακέτο από τρίτο μέρος που δεν έχει πρόσβαση στο χώρο αποθήκευσης. Εάν δεν υπάρχει πρόσβαση για κανένα πακέτο σε ιδιωτικά αποθετήρια, ο διακομιστής registry.npmjs.org επιστρέφει ένα σφάλμα με τον κωδικό "404", αλλά εάν υπάρχει ένα πακέτο με το ζητούμενο όνομα, το σφάλμα εκδίδεται με αξιοσημείωτη καθυστέρηση. Ένας εισβολέας μπορεί να χρησιμοποιήσει αυτή τη δυνατότητα για να προσδιορίσει την παρουσία ενός πακέτου αναζητώντας ονόματα πακέτων χρησιμοποιώντας λεξικά.

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

Το GitHub ενημερώθηκε για το πρόβλημα τον Μάρτιο, αλλά αρνήθηκε να προσθέσει προστασία από την επίθεση, επικαλούμενος αρχιτεκτονικούς περιορισμούς. Συνιστάται στις εταιρείες που χρησιμοποιούν ιδιωτικά αποθετήρια να ελέγχουν περιοδικά για την εμφάνιση επικαλυπτόμενων ονομάτων στο δημόσιο χώρο αποθήκευσης ή να δημιουργούν στελέχη εκ μέρους τους με ονόματα που επαναλαμβάνουν τα ονόματα πακέτων σε ιδιωτικά αποθετήρια, έτσι ώστε οι εισβολείς να μην μπορούν να τοποθετήσουν τα πακέτα τους με επικαλυπτόμενα ονόματα.

Πηγή: opennet.ru

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