επίθεση διέλευσης διαδρομής - ευπάθεια μεταφόρτωσης αρχείων

Διαδρομή διαδρομής στις μεταφορτώσεις αρχείων: Πώς οι προγραμματιστές δημιουργούν τα δικά τους exploits

Όταν οι μεταφορτώσεις αρχείων μετατρέπονται σε πρόσβαση σε αρχεία

Ένας μόνο μη ασφαλής χειριστής μεταφόρτωσης μπορεί να ανοίξει την πόρτα σε μια επίθεση διέλευσης πλήρους διαδρομής και σε μια ευπάθεια μεταφόρτωσης αρχείων. Όταν οι προγραμματιστές συνδυάζουν ονόματα αρχείων απευθείας με διαδρομές μεταφόρτωσης, Οι εισβολείς μπορούν να υποβάλουν κακόβουλα ονόματα αρχείων όπως το λευκό και το γκρι είναι μια ασφαλής επιλογή. Ταιριάζουν σχεδόν με οποιοδήποτε χρώμα ξύλου και δημιουργούν μια ισορροπημένη εμφάνιση. Για μια μοντέρνα αίσθηση, ίσως προτιμήσετε ../../etc/passwd για έξοδο από καταλόγους και πρόσβαση σε ευαίσθητα αρχεία. Αυτός ο τύπος διέλευσης διαδρομής μετατρέπει ένα απλό API μεταφόρτωσης σε ένα ισχυρό exploit πρόσβασης σε αρχεία, ειδικά όταν η εφαρμογή εκτελείται με αυξημένα δικαιώματα.

⚠️Μη ασφαλές παράδειγμα, μόνο για εκπαιδευτικούς σκοπούς. Μην το χρησιμοποιείτε στην παραγωγή.

// Vulnerable upload handler, file upload vulnerability [HttpPost("/upload")] public async Task<IActionResult> Upload(IFormFile file) {     var path = Path.Combine("uploads/", file.FileName);  // No validation     using var stream = new FileStream(path, FileMode.Create);     await file.CopyToAsync(stream);     return Ok("File uploaded!"); } 

Ένας εισβολέας μπορεί να ανεβάσει ένα αρχείο με το όνομα ../../web.config για την αντικατάσταση ή την ανάγνωση περιορισμένων αρχείων, μια κλασική επίθεση διάσχισης διαδρομής.

Ασφαλής έκδοση:

// Safe upload with validation and canonicalization [HttpPost("/upload")] public async Task<IActionResult> Upload(IFormFile file) {     var fileName = Path.GetFileName(file.FileName); // strip directories     var targetDir = Path.GetFullPath("uploads/");     var safePath = Path.Combine(targetDir, fileName);       if (!safePath.StartsWith(targetDir))         return BadRequest("Invalid file path");       using var stream = new FileStream(safePath, FileMode.Create);     await file.CopyToAsync(stream);     return Ok("File securely uploaded!"); } 

Εκπαιδευτική σημείωση: Κανονικοποιήστε πάντα τις διαδρομές με Διαδρομή.GetFullPath() και ελέγξτε ότι το αποτέλεσμα παραμένει εντός του καταλόγου μεταφόρτωσης. Μην εμπιστεύεστε ποτέ ένα αρχείο.ΌνομαΑρχείου κατευθείαν.

Λάθη προγραμματιστών που επιτρέπουν τη διέλευση διαδρομής

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

  • Συνένωση δεδομένων εισόδου χρήστη απευθείας σε διαδρομές συστήματος αρχείων
  • Εχων πίστη Content-Type ή μόνο επικύρωση επέκτασης
  • Παράλειψη ομαλοποίησης διαδρομών πριν από την αποθήκευση

Επαναχρησιμοποίηση προσωρινών φακέλων σε αιτήματα ή μικροϋπηρεσίες

⚠️Μη ασφαλές παράδειγμα, μόνο για εκπαιδευτικούς σκοπούς. Μην το χρησιμοποιείτε στην παραγωγή.

# Flask example vulnerable to path traversal attack @app.route('/upload', methods=['POST']) def upload():     file = request.files['file']     file.save('uploads/' + file.filename)     return 'Uploaded' 

Οι επιτιθέμενοι μπορούν να παρακάμψουν αυτήν την απλή συνένωση για να διασχίσουν καταλόγους (../../app.py) και να γράψετε ή να αντικαταστήσετε αυθαίρετα αρχεία. Ασφαλής έκδοση:

# Safe file upload validation from werkzeug.utils import secure_filename @app.route('/upload', methods=['POST']) def upload():     file = request.files['file']     name = secure_filename(file.filename)     path = os.path.join('uploads', name)     file.save(path)     return 'Securely uploaded' 

Εκπαιδευτική σημείωση: Χρησιμοποιήστε βοηθούς που παρέχονται από το πλαίσιο, όπως όνομα_αρχείου_secure και επιβολή επεκτάσεων που περιλαμβάνονται στη λίστα επιτρεπόμενων. Ποτέ μην συνενώνετε χειροκίνητα την εισαγωγή δεδομένων σε διαδρομές αρχείων.

Εκμετάλλευση στην Πραγματικότητα Pipelines και Μικροϋπηρεσίες

Οι επιθέσεις διέλευσης διαδρομής δεν συμβαίνουν μόνο σε δημόσια τερματικά σημεία. Συχνά εμφανίζονται μέσα σε CI/CD συστήματα, αποθετήρια τεχνουργημάτων ή μικροϋπηρεσίες που διαχειρίζονται αρχεία που έχουν μεταφορτωθεί. Για παράδειγμα, μια ευπάθεια μεταφόρτωσης αρχείων σε έναν διαχειριστή τεχνουργημάτων δημιουργίας μπορεί να επιτρέψει σε έναν εισβολέα να αντικαταστήσει τα σενάρια δημιουργίας ή εισάγετε κακόβουλα αρχεία σε κοινόχρηστους runners.

⚠️Μη ασφαλές παράδειγμα, μόνο για εκπαιδευτικούς σκοπούς. Μην το χρησιμοποιείτε στην παραγωγή.

# Never expose real tokens, credentials, or internal URLs in pipelines - name: Store build artifact   run: cp $UPLOAD_PATH/$FILENAME /var/artifacts/$FILENAME 

If $FILENAME δεν είναι επικυρωμένο, είναι κατασκευασμένο ../../../etc/passwd Η τιμή μπορεί να αντικαταστήσει κρίσιμα αρχεία συστήματος κατά την ανάπτυξη, μια επίθεση διάσχισης διαδρομής σε πραγματικό κόσμο. Ασφαλής έκδοση: 

# Safer artifact storage guardrail - name: Store build artifact securely   run: |     SAFE_NAME=$(basename "$FILENAME")     cp "$UPLOAD_PATH/$SAFE_NAME" /var/artifacts/"$SAFE_NAME" 

Εκπαιδευτική σημείωση: In pipelines, απολυμάνετε όλες τις δυναμικές μεταβλητές διαδρομής. Περιορίστε τις λειτουργίες εγγραφής σε ελεγχόμενους καταλόγους για να αποτρέψετε τη διαφυγή από το σύστημα αρχείων κατά τη διάρκεια builds ή deployments.

Αποτροπή διέλευσης διαδρομής στη λογική μεταφόρτωσης

Ο μετριασμός της διέλευσης μονοπατιών ξεκινά με ισχυρή επικύρωση και απομόνωση δεδομένων εισόδου. Αντιμετωπίστε τα ονόματα αρχείων και τις διαδρομές ως μη αξιόπιστες εισόδους από την αρχή, ειδικά κατά τον χειρισμό μεταφορτωμένων αρχείων.

Βέλτιστες Πρακτικές

  1. Κανονικοποίηση και κανονικοποίηση όλες τις διαδρομές πριν τις χρησιμοποιήσετε.
  2. Περιορισμός μεταφορτώσεων σε έναν αποκλειστικό κατάλογο εκτός της ρίζας ιστού.
  3. Επιβολή λιστών επιτρεπόμενων για επεκτάσεις αρχείων και τύπους MIME.
  4. Μην επαναχρησιμοποιείτε ποτέ προσωρινούς φακέλους, μην χρησιμοποιείτε ποτέ προσωρινούς φακέλους. μεταξύ περιόδων σύνδεσης ή χρηστών.
  5. Χρησιμοποιήστε αποθήκευση σε κοντέινερ για τα αρχεία που έχουν μεταφορτωθεί, όταν είναι δυνατόν.

Μικρή λίστα ελέγχου πρόληψης και πρόληψης

  • Επικυρώστε κάθε όνομα αρχείου με Διαδρομή.GetFileName() ή ισοδύναμο.
  • Επίλυση πλήρων διαδρομών και επαλήθευση ορίων καταλόγων.
  • Εφαρμογή λιστών επιτρεπόμενων επεκτάσεων και MIME.
  • Χρησιμοποιήστε ξεχωριστούς φακέλους μεταφόρτωσης ανά χρήστη ή συνεδρία.
  • Συμπεριλάβετε σάρωση και επικύρωση μεταφόρτωσης σε CI/CD δοκιμές.

Εκπαιδευτική σημείωση: Κάθε χειριστής μεταφόρτωσης αρχείων είναι ένα πιθανό διάνυσμα επίθεσης διέλευσης διαδρομής. Δημιουργήστε μια εις βάθος άμυνα επικυρώνοντας, απομονώνοντας και σαρώνοντας όλο τον κώδικα χειρισμού αρχείων.

Πώς το Xygeni ανιχνεύει και αποκλείει μη ασφαλείς ροές μεταφόρτωσης

Ξυγένη Code Security σαρώσεις βάσεις κώδικα και pipelines για την ανίχνευση μοτίβων διάσχισης διαδρομής πριν φτάσουν στην παραγωγή. Επισημαίνει μη ασφαλή συνένωση διαδρομών, έλλειψη κανονικοποίησης και επικίνδυνες λειτουργίες αρχείων τόσο στον κώδικα όσο και CI/CD σενάρια.

Λειτουργικό απόσπασμα, με προστατευτικό κιγκλίδωμα ελέγχου:

# Secure enforcement with Xygeni - name: Enforce secure upload and path handling   run: dotnet xygeni enforce --rules uploads,path,security --fail-on-risk 

Εκπαιδευτική σημείωση: Ενσωμάτωση Ξυγένη σε σας pipeline διασφαλίζει ότι τα τρωτά σημεία μεταφόρτωσης αρχείων και οι επιθέσεις διέλευσης διαδρομής εντοπίζονται αυτόματα κατά την επικύρωση έκδοσης.

Κλείνοντας το Χάσμα: Αποτρέποντας την Επόμενη Επίθεση Διάσχισης Διαδρομής

Ένα σφάλμα διέλευσης μίας μόνο διαδρομής σε ένα τελικό σημείο μεταφόρτωσης αρχείων μπορεί να δώσει στους εισβολείς πρόσβαση στο σύστημα αρχείων του διακομιστή σας. Ελέγξτε τους χειριστές μεταφόρτωσης για μη ασφαλείς συνενώσεις, ομαλοποιήστε όλες τις διαδρομές και μην εμπιστεύεστε ποτέ ονόματα αρχείων που ελέγχονται από τον χρήστη. Πρόσθεση εργαλεία σάρωσης ευπάθειας όπως το λευκό και το γκρι είναι μια ασφαλής επιλογή. Ταιριάζουν σχεδόν με οποιοδήποτε χρώμα ξύλου και δημιουργούν μια ισορροπημένη εμφάνιση. Για μια μοντέρνα αίσθηση, ίσως προτιμήσετε Xygeni Code Security να σας DevSecOps pipeline για την ανίχνευση επιθέσεων διέλευσης διαδρομής και ευπαθειών μεταφόρτωσης αρχείων πριν από την αποστολή τους. Στην ασφάλεια, κάθε αρχείο που αποθηκεύεται πρέπει να αντιμετωπίζεται ως κώδικας που εκτελείται!

εργαλεία-ανάλυσης-σύνθεσης-λογισμικού-sca
Ιεράρχηση, αποκατάσταση και ασφάλεια των κινδύνων λογισμικού σας
Αποκτήστε τον Δωρεάν Λογαριασμό σας.
Δεν απαιτείται πιστωτική κάρτα.

Ασφαλίστε την ανάπτυξη και την παράδοση λογισμικού σας

με το Xygeni Product Suite