diff --git a/src/mobile-pentesting/ios-pentesting/ios-universal-links.md b/src/mobile-pentesting/ios-pentesting/ios-universal-links.md
index bc129afdc..9adcf45da 100644
--- a/src/mobile-pentesting/ios-pentesting/ios-universal-links.md
+++ b/src/mobile-pentesting/ios-pentesting/ios-universal-links.md
@@ -4,9 +4,9 @@
## Εισαγωγή
-Universal links προσφέρουν μια **αδιάκοπη εμπειρία ανακατεύθυνσης** στους χρήστες, ανοίγοντας απευθείας περιεχόμενο στην εφαρμογή, παρακάμπτοντας την ανάγκη για ανακατεύθυνση μέσω Safari. Αυτοί οι σύνδεσμοι είναι **μοναδικοί** και ασφαλείς, καθώς δεν μπορούν να διεκδικηθούν από άλλες εφαρμογές. Αυτό διασφαλίζεται με τη φιλοξενία ενός αρχείου `apple-app-site-association` JSON στον ριζικό κατάλογο της ιστοσελίδας, καθορίζοντας έναν επαληθεύσιμο σύνδεσμο μεταξύ της ιστοσελίδας και της εφαρμογής. Σε περιπτώσεις όπου η εφαρμογή δεν είναι εγκατεστημένη, το Safari θα αναλάβει και θα κατευθύνει τον χρήστη στη σελίδα, διατηρώντας την παρουσία της εφαρμογής.
+Universal links προσφέρουν μια **αδιάκοπη εμπειρία ανακατεύθυνσης** στους χρήστες, ανοίγοντας απευθείας το περιεχόμενο στην εφαρμογή, παρακάμπτοντας την ανάγκη για ανακατεύθυνση μέσω Safari. Αυτοί οι σύνδεσμοι είναι **μοναδικοί** και ασφαλείς, καθώς δεν μπορούν να διεκδικηθούν από άλλες εφαρμογές. Αυτό διασφαλίζεται με τη φιλοξενία ενός αρχείου JSON `apple-app-site-association` στον ριζικό κατάλογο της ιστοσελίδας, καθορίζοντας έναν επαληθεύσιμο σύνδεσμο μεταξύ της ιστοσελίδας και της εφαρμογής. Σε περιπτώσεις όπου η εφαρμογή δεν είναι εγκατεστημένη, το Safari θα αναλάβει και θα κατευθύνει τον χρήστη στη σελίδα, διατηρώντας την παρουσία της εφαρμογής.
-Για τους penetration testers, το αρχείο `apple-app-site-association` είναι ιδιαίτερα ενδιαφέρον καθώς μπορεί να αποκαλύψει **ευαίσθητους διαδρόμους**, πιθανώς περιλαμβάνοντας αυτούς που σχετίζονται με μη δημοσιευμένα χαρακτηριστικά.
+Για τους penetration testers, το αρχείο `apple-app-site-association` είναι ιδιαίτερα ενδιαφέρον καθώς μπορεί να αποκαλύψει **ευαίσθητους δρόμους**, πιθανώς περιλαμβάνοντας αυτούς που σχετίζονται με μη δημοσιευμένα χαρακτηριστικά.
### **Ανάλυση του Δικαιώματος Σχετικών Τομέων**
@@ -18,21 +18,33 @@ Universal links προσφέρουν μια **αδιάκοπη εμπειρία
applinks:t.me
```
-Για πιο ολοκληρωμένες πληροφορίες, ανατρέξτε στην [αρχειοθετημένη τεκμηρίωση προγραμματιστών της Apple](https://developer.apple.com/library/archive/documentation/General/Conceptual/AppSearch/UniversalLinks.html#//apple_ref/doc/uid/TP40016308-CH12-SW2).
+Για πιο ολοκληρωμένες πληροφορίες, ανατρέξτε στην [αρχειοθετημένη Τεκμηρίωση Προγραμματιστών της Apple](https://developer.apple.com/library/archive/documentation/General/Conceptual/AppSearch/UniversalLinks.html#//apple_ref/doc/uid/TP40016308-CH12-SW2).
Εάν εργάζεστε με μια μεταγλωττισμένη εφαρμογή, τα δικαιώματα μπορούν να εξαχθούν όπως περιγράφεται σε [αυτήν την οδηγία](extracting-entitlements-from-compiled-application.md).
### **Ανάκτηση του Αρχείου Συσχέτισης Ιστοσελίδας της Apple App**
-Το αρχείο `apple-app-site-association` θα πρέπει να ανακτηθεί από τον διακομιστή χρησιμοποιώντας τα domains που καθορίζονται στα δικαιώματα. Βεβαιωθείτε ότι το αρχείο είναι προσβάσιμο μέσω HTTPS απευθείας στο `https:///apple-app-site-association`. Εργαλεία όπως ο [Επαληθευτής Συσχέτισης Ιστοσελίδας της Apple App (AASA)](https://branch.io/resources/aasa-validator/) μπορούν να βοηθήσουν σε αυτή τη διαδικασία.
+Το αρχείο `apple-app-site-association` θα πρέπει να ανακτηθεί από τον διακομιστή χρησιμοποιώντας τα domains που καθορίζονται στα δικαιώματα. Βεβαιωθείτε ότι το αρχείο είναι προσβάσιμο μέσω HTTPS απευθείας στο `https:///apple-app-site-association` (ή `/.well-known/apple-app-site-association`). Εργαλεία όπως ο [Επαληθευτής Αρχείου Συσχέτισης Ιστοσελίδας της Apple (AASA)](https://branch.io/resources/aasa-validator/) μπορούν να βοηθήσουν σε αυτή τη διαδικασία.
-### **Διαχείριση Καθολικών Συνδέσμων στην Εφαρμογή**
+> **Γρήγορη αρίθμηση από ένα shell macOS/Linux**
+>
+> ```bash
+> # assuming you have extracted the entitlements to ent.xml
+> doms=$(plutil -extract com.apple.developer.associated-domains xml1 -o - ent.xml | \
+> grep -oE 'applinks:[^<]+' | cut -d':' -f2)
+> for d in $doms; do
+> echo "[+] Fetching AASA for $d";
+> curl -sk "https://$d/.well-known/apple-app-site-association" | jq '.'
+> done
+> ```
-Η εφαρμογή πρέπει να υλοποιήσει συγκεκριμένες μεθόδους για να διαχειρίζεται σωστά τους καθολικούς συνδέσμους. Η κύρια μέθοδος που πρέπει να αναζητηθεί είναι [`application:continueUserActivity:restorationHandler:`](https://developer.apple.com/documentation/uikit/uiapplicationdelegate/1623072-application). Είναι κρίσιμο ότι το σχήμα των URLs που διαχειρίζεται είναι HTTP ή HTTPS, καθώς άλλα δεν θα υποστηρίζονται.
+### **Διαχείριση των Universal Links στην Εφαρμογή**
+
+Η εφαρμογή πρέπει να υλοποιήσει συγκεκριμένες μεθόδους για να διαχειριστεί σωστά τους universal links. Η κύρια μέθοδος που πρέπει να αναζητηθεί είναι η [`application:continueUserActivity:restorationHandler:`](https://developer.apple.com/documentation/uikit/uiapplicationdelegate/1623072-application). Είναι κρίσιμο ότι το σχήμα των URLs που διαχειρίζεται είναι HTTP ή HTTPS, καθώς άλλα δεν θα υποστηρίζονται.
#### **Επικύρωση της Μεθόδου Διαχείρισης Δεδομένων**
-Όταν ένας καθολικός σύνδεσμος ανοίγει μια εφαρμογή, ένα αντικείμενο `NSUserActivity` μεταφέρεται στην εφαρμογή με το URL. Πριν από την επεξεργασία αυτού του URL, είναι απαραίτητο να το επικυρώσετε και να το καθαρίσετε για να αποφευχθούν κίνδυνοι ασφαλείας. Ακολουθεί ένα παράδειγμα σε Swift που δείχνει τη διαδικασία:
+Όταν ένας universal link ανοίγει μια εφαρμογή, ένα αντικείμενο `NSUserActivity` μεταφέρεται στην εφαρμογή με το URL. Πριν από την επεξεργασία αυτού του URL, είναι απαραίτητο να το επικυρώσετε και να το καθαρίσετε για να αποφευχθούν κίνδυνοι ασφαλείας. Ακολουθεί ένα παράδειγμα σε Swift που δείχνει τη διαδικασία:
```swift
func application(_ application: UIApplication, continue userActivity: NSUserActivity,
restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
@@ -44,7 +56,7 @@ application.open(url, options: [:], completionHandler: nil)
return true
}
```
-Οι διευθύνσεις URL θα πρέπει να αναλύονται και να επικυρώνονται προσεκτικά, ειδικά αν περιλαμβάνουν παραμέτρους, για να προστατευτούν από πιθανή παραποίηση ή κακώς διαμορφωμένα δεδομένα. Η API `NSURLComponents` είναι χρήσιμη για αυτόν τον σκοπό, όπως αποδεικνύεται παρακάτω:
+Οι διευθύνσεις URL θα πρέπει να αναλύονται και να επικυρώνονται προσεκτικά, ειδικά αν περιλαμβάνουν παραμέτρους, για να προστατευτούν από πιθανή παραχάραξη ή κακώς διαμορφωμένα δεδομένα. Η API `NSURLComponents` είναι χρήσιμη για αυτόν τον σκοπό, όπως αποδεικνύεται παρακάτω:
```swift
func application(_ application: UIApplication,
continue userActivity: NSUserActivity,
@@ -70,15 +82,36 @@ return false
}
}
```
-Μέσω **επιμελούς διαμόρφωσης και επικύρωσης**, οι προγραμματιστές μπορούν να διασφαλίσουν ότι οι καθολικοί σύνδεσμοι βελτιώνουν την εμπειρία του χρήστη ενώ διατηρούν τα πρότυπα ασφάλειας και ιδιωτικότητας.
+Μέσω **επιμελούς διαμόρφωσης και επικύρωσης**, οι προγραμματιστές μπορούν να διασφαλίσουν ότι οι καθολικοί σύνδεσμοι ενισχύουν την εμπειρία του χρήστη ενώ διατηρούν τα πρότυπα ασφάλειας και ιδιωτικότητας.
+
+## Κοινές Ευπάθειες & Έλεγχοι Pentesting
+
+| # | Αδυναμία | Πώς να δοκιμάσετε | Εκμετάλλευση / Επίπτωση |
+|---|----------|------------|-----------------------|
+| 1 | **Πολύ ευρείες `paths` / `components`** στο αρχείο AASA (π.χ. `"/": "*"` ή χαρακτήρες μπαλαντέρ όπως `"/a/*"`). | • Εξετάστε το κατεβασμένο AASA και αναζητήστε `*`, τελικούς χαρακτήρες `/`, ή κανόνες `{"?": …}`.
• Δοκιμάστε να ζητήσετε άγνωστες πηγές που εξακολουθούν να ταιριάζουν με τον κανόνα (`https://domain.com/a/evil?_p_dp=1`). | Hijacking καθολικών συνδέσμων: μια κακόβουλη εφαρμογή iOS που καταχωρεί τον ίδιο τομέα θα μπορούσε να διεκδικήσει όλους αυτούς τους συνδέσμους και να παρουσιάσει phishing UI. Ένα πραγματικό παράδειγμα είναι η αναφορά bug-bounty του Temu.com τον Μάιο του 2025 όπου ένας επιτιθέμενος μπορούσε να ανακατευθύνει οποιοδήποτε `/a/*` μονοπάτι στην εφαρμογή του. |
+| 2 | **Απουσία επικύρωσης από τον διακομιστή** των μονοπατιών deep-link. | Αφού προσδιορίσετε τα επιτρεπόμενα μονοπάτια, εκδώστε αιτήματα `curl`/Burp σε μη υπάρχουσες πηγές και παρακολουθήστε τους κωδικούς κατάστασης HTTP. Οτιδήποτε άλλο εκτός από `404` (π.χ. 200/302) είναι ύποπτο. | Ένας επιτιθέμενος μπορεί να φιλοξενήσει αυθαίρετο περιεχόμενο πίσω από ένα επιτρεπόμενο μονοπάτι και να το σερβίρει μέσω του νόμιμου τομέα, αυξάνοντας το ποσοστό επιτυχίας του phishing ή της κλοπής session-token. |
+| 3 | **Διαχείριση URL από την εφαρμογή χωρίς λευκή λίστα scheme/host** (CVE-2024-10474 – Mozilla Focus < 132). | Αναζητήστε άμεσες κλήσεις `openURL:`/`open(_:options:)` ή JavaScript bridges που προωθούν αυθαίρετα URLs. | Εσωτερικές σελίδες μπορούν να μεταφέρουν URLs `myapp://` ή `https://` που παρακάμπτουν τους ελέγχους ασφαλείας της γραμμής διευθύνσεων του προγράμματος περιήγησης, οδηγώντας σε spoofing ή μη προγραμματισμένες προνομιακές ενέργειες. |
+| 4 | **Χρήση υποτομέων μπαλαντέρ** (`*.example.com`) στην εξουσιοδότηση. | `grep` για `*.` στις εξουσιοδοτήσεις. | Εάν οποιοσδήποτε υποτομέας καταληφθεί (π.χ. μέσω ενός ανενεργού S3 bucket), ο επιτιθέμενος αποκτά αυτόματα τη σύνδεση Καθολικού Συνδέσμου. |
+
+### Γρήγορη Λίστα Ελέγχου
+
+* [ ] Εξαγάγετε τις εξουσιοδοτήσεις και απαριθμήστε κάθε `applinks:` είσοδο.
+* [ ] Κατεβάστε το AASA για κάθε είσοδο και ελέγξτε για μπαλαντέρ.
+* [ ] Επαληθεύστε ότι ο διακομιστής ιστού επιστρέφει **404** για μη καθορισμένα μονοπάτια.
+* [ ] Στο δυαδικό αρχείο, επιβεβαιώστε ότι **μόνο** οι αξιόπιστοι τομείς/schemes διαχειρίζονται.
+* [ ] Εάν η εφαρμογή χρησιμοποιεί τη νεότερη σύνταξη `components` (iOS 11+), δοκιμάστε κανόνες παραμέτρων ερωτήματος (`{"?":{…}}`).
## Εργαλεία
-- [GetUniversal.link](https://getuniversal.link/): Βοηθά στην απλοποίηση της δοκιμής και διαχείρισης των Καθολικών Συνδέσμων και του αρχείου AASA της εφαρμογής σας. Απλά εισάγετε το domain σας για να επαληθεύσετε την ακεραιότητα του αρχείου AASA ή χρησιμοποιήστε τον προσαρμοσμένο πίνακα ελέγχου για να δοκιμάσετε εύκολα τη συμπεριφορά των συνδέσμων. Αυτό το εργαλείο σας βοηθά επίσης να προσδιορίσετε πότε η Apple θα ευρετηριάσει ξανά το αρχείο AASA σας.
+- [GetUniversal.link](https://getuniversal.link/): Βοηθά στην απλοποίηση της δοκιμής και διαχείρισης των Καθολικών Συνδέσμων και του αρχείου AASA της εφαρμογής σας. Απλά εισάγετε τον τομέα σας για να επαληθεύσετε την ακεραιότητα του αρχείου AASA ή χρησιμοποιήστε τον προσαρμοσμένο πίνακα ελέγχου για να δοκιμάσετε εύκολα τη συμπεριφορά των συνδέσμων. Αυτό το εργαλείο σας βοηθά επίσης να προσδιορίσετε πότε η Apple θα καταχωρήσει ξανά το αρχείο AASA σας.
+- [Knil](https://github.com/ethanhuang13/knil): Ανοιχτού κώδικα βοηθητικό πρόγραμμα iOS που ανακτά, αναλύει και σας επιτρέπει να **δοκιμάσετε** κάθε Καθολικό Σύνδεσμο που δηλώνεται από έναν τομέα απευθείας στη συσκευή.
+- [universal-link-validator](https://github.com/urbangems/universal-link-validator): CLI / web validator που εκτελεί αυστηρούς ελέγχους συμμόρφωσης AASA και επισημαίνει επικίνδυνους μπαλαντέρ.
## Αναφορές
- [https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0070/#static-analysis](https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0070/#static-analysis)
- [https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06h-testing-platform-interaction#testing-object-persistence-mstg-platform-8](https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06h-testing-platform-interaction#testing-object-persistence-mstg-platform-8)
+- [https://medium.com/@m.habibgpi/universal-link-hijacking-via-misconfigured-aasa-file-on-temu-com-eadfcb745e4e](https://medium.com/@m.habibgpi/universal-link-hijacking-via-misconfigured-aasa-file-on-temu-com-eadfcb745e4e)
+- [https://nvd.nist.gov/vuln/detail/CVE-2024-10474](https://nvd.nist.gov/vuln/detail/CVE-2024-10474)
{{#include ../../banners/hacktricks-training.md}}