Aurenta Group
Klientu portāla un API drošības projekts
- Testēšanas periods
- 23. marts – 16. aprīlis 2026
- Testa veids
- Pelēkās kastes tīmekļa lietotnes un API tests
- Mērķi
- portal.aurenta.example · api.aurenta.example
- Standarti
- OWASP WSTG · PTES · OSSTMM
- Speciālisti
- 2 (sertificēti)
- Klasifikācija
- TLP:AMBER+STRICT
01
Kopsavilkums vadībai
Konteksts
OffSeq veica Aurenta klientu portāla un tā publiskās API pelēkās kastes drošības novērtējumu. Testēšanā tika apvienota automatizēta analīze, manuāla pārbaude un kontrolēta ievainojamību izmantošana. Autentificētajai daļai piekļuva ar klienta nodrošinātiem pagaidu portāla piekļuves datiem.
Galvenie konstatējumi
- Kritiska, neautentificēta SQL injekcija pieteikšanās API ļauj pilnībā apiet autentifikāciju un iegūt lasīšanas piekļuvi lietotāju krātuvei.
- Piekļuves kontroles kļūda (IDOR) ļauj jebkuram autentificētam lietotājam lejupielādēt citu klientu rēķinus, radot plašas datu atklāšanas risku.
- Padziļinātās aizsardzības trūkumi: nav satura drošības politikas (CSP), HSTS darbības laiks ir īsāks par vienu gadu un produkcijas vidē tiek izmantota neatbalstīta React versija.
Prioritārie ieteikumi
- Parametrizējiet visus datubāzes vaicājumus un izmantojiet datubāzes kontus ar minimālajām nepieciešamajām tiesībām. SQL injekcijas novēršanai piešķiriet augstāko prioritāti.
- Ieviesiet objektu līmeņa autorizāciju katram API resursam un izmantojiet identifikatorus, kurus nevar vienkārši secīgi uzskaitīt.
- Ieviesiet CSP, sākot ar tikai ziņošanas režīmu un pēc tam pārejot uz piespiedu piemērošanu; pagariniet HSTS vismaz līdz vienam gadam un izvērtējiet gatavību preload sarakstam; plānojiet React atjaunināšanu.
- Kritisks 1
- Augsts 1
- Vidējs 1
- Zems 2
- Informatīvs 1
Īsumā
Tika identificēti seši konstatējumi: viens kritisks, viens augsts, viens vidējs, divi zemi un viens informatīvs. Kritisko un augsto konstatējumu var sasaistīt uzbrukuma ķēdē, kas ļauj plašā apjomā atklāt klientu personas un finanšu datus.
Slēdziens
Portālu nevajadzētu apstiprināt palaišanai produkcijas vidē, kamēr kritiskā SQL injekcija un augsta kritiskuma IDOR nav novērsti un pārbaudīti atkārtotā testā. Pārējie konstatējumi attiecas uz padziļinātās aizsardzības stiprināšanu.
02
Ievainojamību kopsavilkums
| Kritiskums | Atrasti | Pieņemami | Slēdziens |
|---|---|---|---|
| Kritisks | 1 | 0 | Nepieņemami |
| Augsts | 1 | ≤ 1 | Pieļaujamās robežās |
| Vidējs | 1 | ≤ 3 | Pieļaujamās robežās |
| Zems | 2 | ≤ 7 | Pieļaujamās robežās |
| Informatīvs | 1 | – | – |
Kopējais slēdziens
Nepieciešama novēršana
Viens kritisks konstatējums pārsniedz pieņemamības slieksni, tādēļ kopējais slēdziens ir „nepieciešama novēršana“ neatkarīgi no pārējām kategorijām.
03
OWASP Top 10 (2025) pārklājums
- A01:2025 Nepilnīga piekļuves kontrole IDOR uz /v1/invoices Neatbilst
- A02:2025 Drošības konfigurācijas kļūdas Trūkst CSP, īss HSTS Neatbilst
- A03:2025 Programmatūras piegādes ķēdes kļūmes Ārpus dzīves cikla React 16.13.1 Neatbilst
- A04:2025 Kriptogrāfijas kļūmes Atbilst
- A05:2025 Injekcija SQL injekcija autentifikācijas API Neatbilst
- A06:2025 Nedrošs dizains Atbilst
- A07:2025 Autentifikācijas kļūmes Atbilst
- A08:2025 Programmatūras vai datu integritātes kļūmes Atbilst
- A09:2025 Žurnalēšanas un brīdināšanas kļūmes Ārpus šī projekta tvēruma N/P
- A10:2025 Izņēmuma situāciju nepareiza apstrāde Atbilst
04
Izpēte
Pasīvā izpēte apzināja portāla publisko uzbrukuma virsmu. Trīs apakšdomēni norāda uz portāla izcelsmes serveri aiz Cloudflare, savukārt viens administrācijas resursdators DNS sistēmā norāda tieši uz serveri un apiet WAF.
| Resursdators | IP | Piezīme |
|---|---|---|
| portal.aurenta.example | 203.0.113.10 | Galvenais portāls · aiz Cloudflare |
| api.aurenta.example | 203.0.113.11 | Publiskais API |
| admin.aurenta.example | 203.0.113.12 | Tieša piekļuve izcelsmes serverim – apiet WAF |
| status.aurenta.example | 203.0.113.13 | Statusa lapa · pārmērīgi detalizēti būvējuma metadati |
- Statusa lapa publicē detalizētus būvējuma metadatus (git SHA, būvējuma datums).
- Testēšanas periodā bija pieejami divi pirmsprodukcijas apakšdomēni (stg-*).
05
Konstatējumi
Seši reprezentatīvi konstatējumi, sakārtoti pēc kritiskuma. Katrs ir atkārtojams un sasaistīts ar labojumu.
Neviens konstatējums neatbilst filtram.
-
OS-01
Neautentificēta SQL injekcija portāla autentifikācijas API
Kritisks Atvērts A05:2025 CWE-89
CVSS 3.1 9.8 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
Pieteikšanās galapunkta lauks `email` tiek tieši iekļauts SQL vaicājumā bez parametrizācijas. Uz laiku balstīta aklā injekcija apstiprina ievainojamību un ļauj apiet autentifikāciju un patvaļīgi nolasīt tabulu `users`, tostarp e-pasta adreses, lomas un bcrypt paroļu jaucējvērtības.
Skartie
- POST https://api.aurenta.example/v1/auth/login
Ietekme
Neautentificēts uzbrucējs varētu pieteikties kā jebkurš lietotājs, tostarp administrators, un iegūt klientu identitātes datus. Tas varētu izraisīt kontu pārņemšanu un personas datu aizsardzības pārkāpumu, kas jāizvērtē atbilstoši GDPR paziņošanas prasībām.
Tehniskā informācija
Piecu sekunžu aizture zemāk norādītajam testa ievaddatu piemēram salīdzinājumā ar tūlītēju atbildi uz kontroles pieprasījumu apstiprina uz laiku balstītu aklo SQL injekciju:
HTTP pieprasījums
POST /v1/auth/login HTTP/2 Host: api.aurenta.example Content-Type: application/json {"email":"x' OR (SELECT 1 FROM (SELECT SLEEP(5))a)-- -","password":"x"}HTTP atbilde
HTTP/2 200 content-type: application/json x-response-time: 5024ms {"token":"eyJhbG...","role":"admin"}Pierādījumi
sqlmap identified the following injection point: Parameter: email (JSON) Type: time-based blind Title: MySQL >= 5.0.12 AND time-based blind (SLEEP) available databases [2]: aurenta_portal, information_schema Database: aurenta_portal Table: users [48,213 entries]sqlmap apstiprinājums (rediģēts) Novēršana
Aizstājiet ar virkņu savienošanu veidotus SQL vaicājumus ar parametrizētiem vaicājumiem. Darbiniet lietotni ar datubāzes kontu, kam ir tikai nepieciešamās tiesības, validējiet ievadi pēc atļauto vērtību principa un līdz koda labojuma ieviešanai izmantojiet pagaidu WAF noteikumu. Nomainiet piekļuves datus, kas varētu būt atklāti.
-
OS-02
Bojāta piekļuves kontrole atklāj katra klienta rēķinus (IDOR)
Augsts Atvērts A01:2025 CWE-639
CVSS 3.1 8.1 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:L/A:N
Rēķinu ierakstiem tiek izmantoti secīgi skaitliski ID, un tie tiek atgriezti bez īpašumtiesību pārbaudes. Jebkurš autentificēts lietotājs var mainīt identifikatoru, secīgi uzskaitīt un lejupielādēt citu klientu rēķinus, kuros ir vārdi, adreses un maksājumu kopsavilkumi.
Skartie
- GET https://api.aurenta.example/v1/invoices/{id}
Ietekme
Ar vienu zemu privilēģiju kontu varētu iegūt visas klientu bāzes rēķinu vēsturi, plašā apjomā atklājot personas un finanšu datus un potenciāli radot GDPR paziņošanas pienākumu.
HTTP pieprasījums
GET /v1/invoices/100245 HTTP/2 Host: api.aurenta.example Authorization: Bearer <attacker-session>HTTP atbilde
HTTP/2 200 content-type: application/pdf content-disposition: attachment; filename="invoice-100245.pdf" %PDF-1.7 (rēķins *citam* klientam)Pierādījumi
for id in $(seq 100240 100260); do curl -s -o "inv-$id.pdf" -w "%{http_code}\n" \ -H "Authorization: Bearer $T" \ https://api.aurenta.example/v1/invoices/$id done # 21/21 atgrieza HTTP 200 – neviens nepiederēja testa kontam.Uzskaites cikls (mēroga pierādījums) Novēršana
Ieviesiet objektu līmeņa autorizāciju katram pieprasījumam, servera pusē pārbaudot, vai autentificētajam subjektam ir tiesības piekļūt pieprasītajam resursam. Aizstājiet secīgos ID ar grūti uzskaitāmiem identifikatoriem, piemēram, UUIDv4, un pēc noklusējuma liedziet piekļuvi.
-
OS-03
Satura drošības politika (CSP) nav ieviesta
Vidējs Nepieciešama stiprināšana A02:2025 CWE-693
CVSS 3.1 4.0 CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:L/I:L/A:N
Aplikācija neatgriež `Content-Security-Policy` galveni nevienā lapā, kas novērota testēšanas laikā.
Skartie
- https://portal.aurenta.example/
- https://portal.aurenta.example/users/sign_in
- https://portal.aurenta.example/admin/*
Ietekme
Bez CSP pārlūks nevar ierobežot atstarota vai saglabāta XSS, neatļautas trešo pušu skriptu ielādes vai datu izguves sekas pēc veiksmīgas injekcijas. Tādējādi trūkst būtiskas padziļinātās aizsardzības kontroles.
HTTP atbilde
HTTP/2 200 content-type: text/html; charset=utf-8 strict-transport-security: max-age=15552000 x-frame-options: DENY x-content-type-options: nosniff (nav Content-Security-Policy galvenes)Novēršana
Ieviesiet stingru CSP, sākot ar pieteikšanās un administrēšanas lapām. Vispirms izmantojiet `Content-Security-Policy-Report-Only` režīmu, izvērtējiet pārkāpumus un pēc tam piemērojiet politiku piespiedu kārtā. Skriptiem neizmantojiet `unsafe-inline`; lietojiet nonce vērtības vai jaucējvērtības.
-
OS-04
Novecojusi JavaScript bibliotēka – React 16.13.1
Zems Ieteicams atjauninājums A03:2025 CWE-1104
Produkcijas komplektā ir React 16.13.1 (2020. gada marts), kas vairs netiek atbalstīts. Pat ja nav zināma tieši piemērojama CVE, neatbalstīts ietvars un tā tranzitīvās atkarības palielina uzturēšanas un drošības risku.
Skartie
- https://portal.aurenta.example/assets/application-90283b17.js
Ietekme
Neatbalstīta ietvara izmantošana palielina iespējamību, ka produkcijas vidē nonāk neielāpota ievainojamība caur tranzitīvu atkarību.
Novēršana
Ieviesiet nepārtrauktu atkarību pārskati (Dependabot / Renovate), pievienojiet programmatūras sastāva analīzi (SCA) CI un plānojiet migrāciju uz React 18/19.
Atsauces
-
OS-05
HSTS max-age ir zem viena gada
Zems Nepieciešama stiprināšana A02:2025 CWE-16
Galvenē `Strict-Transport-Security` ir norādīts `max-age=15552000` (180 dienas), kas ir mazāk par viena gada periodu, ko parasti prasa pirms domēna iekļaušanas HSTS preload sarakstā.
Skartie
- https://portal.aurenta.example/
Ietekme
Īsāks `max-age` samazina periodu, kurā pārlūks pēc pēdējā drošā apmeklējuma atsakās izmantot nešifrētu HTTP, un nedaudz palielina SSL stripping uzbrukuma risku.
Novēršana
Pēc pārliecināšanās, ka visi apakšdomēni atbalsta HTTPS, iestatiet `Strict-Transport-Security: max-age=63072000; includeSubDomains; preload` un pēc tam izvērtējiet domēna iesniegšanu HSTS preload sarakstā.
Atsauces
-
OS-06
Publiski pieejams rekursīvs DNS atrisinātājs
Informatīvs Informatīvs
Portāla resursdators atbild uz rekursīviem DNS vaicājumiem par svešām zonām no neautorizētām avota adresēm (iestatīti RD+RA karodziņi).
Skartie
- 203.0.113.10:53
Ietekme
Atvērtu rekursīvo DNS serveri var ļaunprātīgi izmantot datplūsmas pastiprināšanai atstarotos DDoS uzbrukumos pret trešajām pusēm. Tieša ietekme uz Aurenta datiem netika demonstrēta; konstatējums iekļauts pilnīgam pārskatam.
Novēršana
Ierobežojiet UDP/TCP 53 perimetrā līdz autorizētiem klientiem vai atspējojiet rekursiju publiskajai saskarnei.
06
Kā konstatējumi sasaistās ielaušanā
Atsevišķi konstatējumi nozīmē mazāk nekā tas, ko tie kopā ļauj sasniegt. Šī ir secība, ko mēs demonstrējām – no virsmas kartēšanas līdz masveida datu atklāšanai.
Apzināt uzbrukuma virsmu
Apzinājām portālu, publisko API un administrācijas resursdatoru, kas DNS sistēmā norāda tieši uz serveri un apiet Cloudflare WAF.
admin.aurenta.example atklāts
Apiet autentifikāciju
Aklā SQL injekcija pieteikšanās API ļauj iegūt derīgu administratora sesiju bez derīgiem piekļuves datiem.
Autentifikācijas apiešana · CVSS 9.8
Iegūt lietotāju datus
Tā pati injekcija nolasa lietotāju tabulu – e-pastus, lomas un paroļu jaucējvērtības – tieši no datubāzes.
Atklāti 48 000 ierakstu
Secīgi iegūt rēķinus
Secīgi rēķinu ID bez īpašumtiesību pārbaudes ļauj jebkurai sesijai uzskaitīt un lejupielādēt katra klienta rēķinu.
Masveida PII / finanšu dati
Plašā apjomā izgūt datus
Kopā šie konstatējumi nodrošina sākotnējo piekļuvi un automatizējamu ceļu klientu datu plaša apjoma izgūšanai.
Potenciāli ziņojams GDPR pārkāpums
Demonstrētā ķēde · OS-01 → OS-02 · pelēkās kastes projekts, 2026. gada aprīlis
07
Sociālā inženierija (pikšķerēšanas kampaņa)
Aurenta darbiniekiem tika nosūtīta uz iepriekš izstrādātu leģendu balstīta pikšķerēšanas kampaņa ar klonētu portāla pieteikšanās lapu. Ievadītie piekļuves dati serverī tika nekavējoties dzēsti un netika saglabāti.
- Mērķētie darbinieki
- 700
- Ievadīti piekļuves dati
- 154 (22%)
- Ziņots IT
- 38 (5%)
22% piekļuves datu iesniegšanas rādītājs liecina par būtisku izpratnes trūkumu. Iesakām ceturkšņa zināšanu nostiprināšanu un mērķētu papildu apmācību darbiniekiem, kuri atkārtoti reaģē uz simulācijām.
Reprezentatīvs izvilkums – pilns ziņojums aizņem 30–60+ lappuses