sigurnosni izvještaj · verzija 2 · 15. srpnja 2026.

Provjerljive tvrdnje.

Ovo nije marketinška stranica u stilu „mi smo sigurni“, nego skup provjerljivih tvrdnji (SR-N), od kojih svaku možete osporiti u našem bug bounty programu uz nagradu.

01 · Pristup vašem serveru

Pristup vašem serveru

SR-1Root lozinka se koristi jednom i ne pohranjuje se na našoj strani.provjereno+

Lozinka je potrebna samo za otvaranje prve SSH veze i instalaciju servisnog korisnika. Prosljeđuje se kao SSH autentifikacija naše veze — ne kao argument skripte ili varijabla okoline. Naša baza podataka za nju nema polje; ne dospijeva u okoline u kojima se izvode skripte i ne zapisuje se u zapisnike (pogreške povezivanja sadrže samo adresu i port, nikada lozinku). U memoriji se nakon uporabe briše (best-effort) — to je obrana u dubinu, ne jamstvo: Go može zadržati kopije vrijednosti na hrpi sve do sakupljanja smeća (garbage collection).

Iskrena ograda: to ostaje root lozinka na vašem serveru. Nakon instalacije onemogućujemo prijavu lozinkom i prijavu kao root preko SSH-a, ali samu lozinku ne mijenjamo — promijenite je sami ako želite. „Ne pohranjujemo je“ je istina; „prestala je biti tajna“ nije.

SR-2Nakon instalacije prijava lozinkom i root prijava preko SSH-a su onemogućene.provjereno+

PasswordAuthentication no, PermitRootLogin no, SSH premješten na nestandardni port (zadano 12011), uključen fail2ban (jednosatna zabrana nakon 5 neuspjeha), prijava samo ključem. Javni ključ se prije uporabe strogo provjerava: znakovi novog retka (zaštita od podmetanja dodatnih ključeva u authorized_keys) i sintaktički nevažeći ključevi se odbijaju.

Zaštita od zaključavanja: port 22 se ne zatvara dok jezgra (putem ss) ne potvrdi da novi SSH port zaista sluša; konfiguracija se provjerava naredbom sshd -t, a sudo pravilo naredbom visudo -cf, oboje se pri pogrešci vraća natrag.

SR-3Upravljački ključ pohranjen je samo u šifriranom obliku.provjereno+

Ploča ne radi s vašom lozinkom, nego s zasebnim ključem (ed25519) koji sama generira. Privatni dio leži u bazi podataka šifriran pomoću AES-256-GCM. Ključ za šifriranje (KEK) pohranjen je odvojeno od baze podataka — u varijabli okoline servera — i u produkciji je obavezan (ne postoji nesigurna zadana vrijednost: bez KEK-a kriptografski podsustav jednostavno se neće pokrenuti). Isto šifriranje štiti teške tajne u bazi podataka — Marzban administratorsku lozinku/token/JWT, Reality ključeve, ključeve pružatelja plaćanja, predmemoriju proxy vjerodajnica, konfiguraciju sigurnosnih kopija.

Šifriranje podatke ne samo skriva, nego ih i autentificira (GCM oznaka autentičnosti): manipulacija šifriranim poljem otkriva se pri dešifriranju i odbija. Svako polje se šifrira novom nasumičnom vrijednošću nonce; vrijednost KEK-a nikada ne dospijeva u zapisnike — samo njegov kratki id.

O tokenima ovlasti: pretplatnički token /sub je bearer tajna. Za pretragu pohranjujemo samo njegov SHA-256, dok se kopija potrebna za ponovni prikaz već izdane poveznice čuva kao AES-GCM šifrat. Stariji zapisi u čitljivom obliku migriraju se u novi format, fail-closed, prije pokretanja HTTP servera. Identifikator URL-a platnog webhooka pohranjen je u čitljivom obliku, ali sam po sebi ne autentificira događaj: autentičnost se provjerava zasebno HMAC potpisom.

SR-4Privatni ključ nikada ne dolazi do preglednika.provjereno+

Ključ se dešifrira samo na serveru, u memoriji; obični API-ji ga nikada ne vraćaju. Jedini način da ga se dobije jest namjerna funkcija izvoza („uzmite svoj ključ“), zaštićena prijavom uz jednokratni e-mail kôd (kôd se pohranjuje samo kao HMAC hash, uspoređuje se u konstantnom vremenu, TTL 10 minuta, 5 pokušaja). Ključ se tako može namjerno dohvatiti, ali ne i „procuriti“ kroz uobičajeni zahtjev.

SR-5Kad se server izbriše, ključ se sinkrono briše iz njegovog zapisa.provjereno+

Prije promjene stanja servera i prije bilo kakvih pozadinskih mrežnih operacija, polja koja sadrže upravljački ključ sinkrono se nuliraju. Ako baza podataka ne potvrdi brisanje, operacija vraća pogrešku i može se ponoviti. Brisanje ostaje „meko“: redak i netajni servisni podaci se čuvaju. To ne znači fizičko brisanje već stvorenih sigurnosnih kopija — njihov životni ciklus uređuje pravilo zadržavanja sigurnosnih kopija.

SR-16Revidirani partnerski API-ji ograničavaju pristup na vlasnika resursa.provjereno+

Revidirane partnerske rute autoriziraju prema partner_id, koji server izvodi iz potpisanog tokena prijave — ne iz onoga što je klijent poslao u putanji ili tijelu zahtjeva. Prije vraćanja ili promjene bilo čega, sustav ponovno provjerava da traženi server, klaster, inbound, ruta, VPN korisnik ili plaćanje pripadaju vašem računu; odgovarajući upiti baze podataka ograničeni su vašim partner_id, a shema (složeni jedinstveni ključevi uz složene strane ključeve) odbija nevažeće veze među partnerima. Izolacija je slojevita: aplikacija, ponovna provjera u use-caseu, filtar partner_id i shema.

Iskrena ograda: ovo je potvrđeno revizijom koda kroz putanju zahtjeva, a ne javnim penetracijskim testom — pa je SR-16, kao i ostalo, otvoren za pobijanje u bug bountyju.

Iskreno o pristupu ploče — to je puni admin, ne „ograničeni“.iskrena napomena+

Kako bi sve postavila automatski (instalirala Xray+Reality, primijenila konfiguraciju, čitala metrike), ploča na serveru ima puni administratorski pristup (ekvivalent roota, preko servisnog korisnika s bezlozinkovim sudo). To je nužno za upravljanje i NE nazivamo to „ograničenim“.

Što smanjuje rizik: tajne se serveru prosljeđuju samo putem stdina procesa (ne kao argumenti naredbe — nisu vidljive u popisu procesa); nakon prve instalacije svaka upravljačka veza provjerava prikvačeni ključ domaćina servera — zamjena servera „u sredini“ se odbija. Što vi kontrolirate: pristup počiva na ključu koji možete opozvati u bilo kojem trenutku — brisanjem servera (ključ se nulira) ili jednostavno brisanjem VPS-a kod vašeg pružatelja (tada sve nestaje).

02 · Vaši podaci i privatnost

Vaši podaci i privatnost

SR-6VPN korisnici žive na vašem serveru; mi držimo minimum servisnih metapodataka.provjereno+

Sami VPN računi (VLESS/Reality) stvaraju se i žive u Marzbanu na vašem master serveru. Centralno pohranjujemo samo ono što je potrebno za izdavanje pretplatničke poveznice: nasumični pretplatnički token i šifrirani snimak proxy vjerodajnica (predmemorija; izvor istine je vaš Marzban). Nemamo nikakvu povijest prometa, IP adresa ni posjeta korisnika.

Evo iskrenog popisa mjesta na kojima e-pošta krajnjeg korisnika ipak prolazi kroz našu središnju bazu podataka: poruku s kodom za prijavu šaljemo mi, pa adresa prolazi kroz naš red za slanje (za svaku prijavu u trgovinu, uključujući besplatnu); pri plaćanju e-pošta kupca stiže u webhook plaćanja i ulazi u zapisnik plaćanja; pri povezivanju Telegrama e-pošta se sprema u profil. To su jedine dodirne točke — servisne i po nužnosti; ne dotiču promet ni ponašanje korisnika.

Te servisne podatke čuvamo samo onoliko koliko je potrebno i brišemo ih automatski: e-pošta se uklanja iz reda za slanje odmah nakon slanja, sadržaj platnog događaja nakon obrade, a događaji koji čekaju ponovni pokušaj unutar razdoblja od 90 dana. Svoj račun zajedno s povezanim podacima možete izbrisati obraćanjem podršci (za pojedinosti pogledajte rizik 7). To otkrivamo otvoreno, umjesto da skrivamo iza nejasnih formulacija.

SR-7Ne prikupljamo zapisnike vašeg prometa ni posjeta, a serveri ne vode dnevnik posjeta.provjereno+

Platforma CreateYourVPN ne prima i ne pohranjuje informacije o tome koje stranice posjećujete vi ili vaši korisnici. Shema unosa metrika je zatvorena: fizički nema polja za IP adrese, domene ili posjete — samo agregate (broj jedinstvenih na mreži, ukupni bajtovi, CPU/RAM/opterećenje). Svaki čvor autentificira se HMAC tokenom vezanim uz vlastiti id i može zapisivati metrike samo za sebe. Balanser na čvoru (HAProxy) radi kao TCP usmjerivač prema SNI i ne dešifrira promet. Na samom serveru sistemski dnevnici čuvaju se najviše otprilike sat vremena i ne prosljeđuju se u syslog.

Osim na razini platforme, ni serveri ne vode dnevnik posjeta: Xray zapisivanje pristupa prisilno se onemogućuje pri svakom slanju konfiguracije (platforma postavlja log.access na none), pa rubni proxy ne bilježi na koje se adrese korisnici spajaju. To je nametnuto u kodu i uvedeno na cijeloj floti.

SR-8Web analitika je Google Analytics; nema drugih pratitelja.provjereno+

Kako bismo razumjeli kako se web i ploča koriste, primjenjujemo Google Analytics (banner za kolačiće upozorava na prikupljanje kolačića i statistike; pojedinosti su u Politici privatnosti). Nema drugih pratitelja trećih strana: nema Sentryja, PostHoga, Mixpanela ni oglasnih piksela (provjereno pretraživanjem oba frontenda). Backend uopće nema telemetriju trećih strana. Izlog za krajnjeg korisnika uopće nije pokriven analitikom — nema GA, nema pratitelja (provjerljivo iz njegovih izvora).

Ograda: GA prima vašu IP adresu (na Googleovoj strani) i adrese pregledanih stranica ploče; URL-ovi ploče sadrže samo identifikator klastera, a ne e-mail.

SR-9Plaćanja su vanjska — ne primamo puni broj kartice.provjereno+

Plaćanje i svi podaci o kartici obrađuju se na strani pružatelja (Tribute / Lemon Squeezy). Mi primamo samo potpisani webhook (HMAC-SHA256, usporedba u konstantnom vremenu, provjeren prije nego što se tijelo raščlani i prije bilo kakvog zapisa u bazu podataka: bez poznavanja tajne događaj ne prolazi provjeru). Ne primamo puni broj kartice (PAN) ni CVV. Ponovna dostava istog webhooka (ponavljanja pružatelja) ne uzrokuje dvostruko odobrenje — događaji se dedupliciraju.

Ograda: pružatelj u tijelo webhooka može uključiti metapodatke kartice (marku i posljednje 4 znamenke) te ime i e-mail platitelja. Izvorno tijelo potrebno je workeru dok se obrada ne dovrši; nakon uspješne obrade briše se zajedno s naznakom e-maila. Događaji koji čekaju ponavljanje ili ručnu provjeru zadržavaju izvorno tijelo samo do kraja razdoblja zadržavanja (90 dana bez aktivnosti), nakon čega se metapodaci kartice i e-mail platitelja automatski brišu. „Nema punog broja kartice“ je istina, ali to je svojstvo pružatelja (tijelo sami ne filtriramo); „o kartici ne vidimo baš ništa“ nije.

Što o vama (partneru) pohranjujemo, iskreno.iskrena napomena+

E-mail (potreban za prijavu), vrijeme posljednje prijave, način sučelja; za naplatu — stanje i Telegram (za nadoplate). IP partnera se ne pohranjuje u bazu podataka i u ploči ne čuvamo nikakvu povijest klikova ni radnji (osim kratkog zapisnika pristupa pri pogreškama).

03 · Ojačavanje servera

Ojačavanje servera

SR-10Vatrozid odbija sve osim onoga što je potrebno.provjereno+

Vatrozid prema zadanim postavkama odbija dolazne veze. Otvoreno prema van: 443 (VPN, Xray+Reality), SSH na nestandardnom portu (zadano 12011) i — na master serveru — port administratorske ploče Marzban, samo za IP adrese upravljačkog sloja. Port 80 otvara se zasebno samo u načinu Let's Encrypt za HTTP-01. Port 22 se zatvara nakon premještanja SSH-a.

Upravljački portovi čvora otvoreni su samo za IP master servera, ne prema van (neuspjeh ovog vezivanja prekida instalaciju). Ako vatrozid ne postane aktivan, instalacija ne uspijeva. ICMP echo ograničen je samo za IPv4; ne obećavamo da je server „nevidljiv“, a IPv6 ICMP je sačuvan kako bi IPv6 ispravno radio.

SR-11Automatska sigurnosna ažuriranja.provjereno+

Nenadzirana nadogradnja automatski instalira ažuriranja sigurnosnih paketa. Ograda: automatsko ponovno pokretanje namjerno je onemogućeno (kako se neprovjerena jezgra ne bi sama ponovno pokrenula) — što znači da se popravci koji zahtijevaju ponovno pokretanje (jezgra, ponekad OpenSSH) primjenjuju tek nakon ručnog ili zakazanog ponovnog pokretanja. „Automatsko krpanje“ vrijedi za userland, ne za ono što zahtijeva ponovno pokretanje.

Iskreno o „nevidljivosti“ — ne tvrdimo je.iskrena napomena+

NE tvrdimo da je server „nevidljiv“ ili „da se ne može skenirati“. Port 443 je otvoren i odgovara na TCP vezu kao svaki web server. Svojstvo „pri neispravnoj vezi izgleda kao obična nepovezana web stranica“ pruža protokol Reality unutar Xraya — zasebna komponenta koju ne pretvaramo u apsolut.

04 · Platforma (upravljačka ploča)

Platforma (upravljačka ploča)

SR-12Prijava na vaš CreateYourVPN račun bez lozinke.provjereno+

Partner se prijavljuje jednokratnim 6-znamenkastim kodom poslanim na e-mail. Račun nema lozinku. To se ne odnosi na interne vjerodajnice upravljanih komponenti, poput generirane Marzban administratorske lozinke. Kodove generira kriptografski generator; pohranjuje se samo njihov HMAC hash, a usporedba je u konstantnom vremenu. Kôd je za jednokratnu uporabu: pri uspjehu se odmah briše (bez ponovne uporabe); nakon 5 pogrešnih pokušaja se rano gasi. Ograničenje učestalosti izdavanja broji se po e-mailu, ne po IP-u — ne može se zaobići mijenjanjem adresa.

SR-13Sesija je zaštićena.provjereno+

Token sesije nalazi se u HttpOnly i Secure kolačiću (JS ga ne može čitati), provjerava se na backendu (ne samo na rubu). Istek zbog neaktivnosti i automatska odjava pri neaktivnosti implementirani su na klijentu, ne na serveru. Token je potpisan pomoću HS256; pri provjeri strogo odbijamo bilo koji drugi algoritam (uključujući „none“) — klasični napad zamjenom algoritma ne prolazi. Token izloga i token partnerske ploče odvojeni su prema publici: token krajnjeg korisnika tehnički ne može doći do partnerskog API-ja (i obrnuto). Izbrisani partner se odbija čak i sa živim tokenom.

Ograda: opoziv je implementiran provjerom da partner postoji pri svakom zahtjevu, a ne poništavanjem samog tokena; odjava briše kolačić, ali izdani token ostaje kriptografski valjan do isteka (do sat vremena). Još ne postoji centralizirani popis opoziva (svjesno MVP pojednostavljenje).

SR-14Tokeni i tajne ne cure u preglednik.provjereno+

U lokalnoj pohrani preglednika nema tokena (samo postavke sučelja); nikakve tajne ni adresa API-ja ne dospijevaju u klijentski paket. Samo server (Next.js) stavlja token u HttpOnly kolačić. Preglednik komunicira s jezgrom samo preko servera (Server Actions): frontend ne poziva API izravno iz preglednika, a CORS ne dopušta čitanje odgovora API-ja iz drugih izvora u pregledniku.

Pojašnjenje umjesto nekadašnjeg apsoluta: sama domena API-ja je javni domaćin — tehnički je možete otvoriti iz preglednika, ali bez sesije ne vraća nikakve autorizirane podatke.

SR-15Javne domene platforme koriste HTTPS sa strogim sigurnosnim zaglavljima.provjereno+

Javne domene CreateYourVPN-a poslužuju se putem HTTPS-a s HSTS-om (max-age dvije godine, includeSubDomains). I web frontend i domena API-ja šalju strog skup sigurnosnih zaglavlja: restriktivnu Content-Security-Policy, X-Content-Type-Options: nosniff, X-Frame-Options i zaključanu Referrer-Policy (no-referrer na API-ju; strict-origin-when-cross-origin na frontendu, koji ujedno šalje restriktivnu Permissions-Policy).

To radi u produkciji na obje domene i može se neovisno provjeriti — bilo kojim inspektorom HTTP zaglavlja ili uslugom poput SSL Labs.

Iskreno o rizicima (što NE obećavamo)

Iskreno o rizicima (što NE obećavamo)

Izvještaj bez ovog odjeljka je marketing. Evo stvarnih granica:

01Centralizirano pohranjivanje ključeva — pod višeslojnom zaštitom.

Upravljačka ploča pohranjuje šifrirane pristupne ključeve za cijelu flotu poslužitelja. To je, naravno, najosjetljivija komponenta sustava — i štitimo je u skladu s time.

Što je štiti: teške tajne u bazi podataka postoje isključivo kao šifrat; ključ za šifriranje (KEK) pohranjuje se odvojeno od baze podataka; ključevi nikada ne dospijevaju u preglednik; a pri brisanju poslužitelja poništavaju se na nulu. Pretplatnički tokeni imaju dodatni sloj — pretraga po hashu (hash lookup) uz AES-GCM — tako da čak ni izvoz (dump) baze podataka bez KEK-a ne sadrži nijednu funkcionalnu /sub poveznicu.

Iskrena granica: šifriranje pouzdano štiti od krađe same baze podataka — sigurnosne kopije, replike ili dumpa. Ono ne uklanja rizik potpune kompromitacije samog poslužitelja (host) ploče, gdje su i KEK i baza podataka dostupni jednom jedinom procesu. Zato je glavni fokus naše obrane spriječiti upravo preuzimanje hosta: izolacija, automatska sigurnosna ažuriranja i minimalna izložena površina.

Namjenski KMS/HSM stići će u jednom od nadolazećih sigurnosnih izdanja.

02Rizik napada Man-in-the-Middle (MITM) pri prvom povezivanju sveden je praktički na nulu.

Kad dodate poslužitelj, spajamo se na njega točno jednom — pomoću privremene lozinke koju unesete. Upravo je pri tom prvom povezivanju napad Man-in-the-Middle (MITM) teoretski moguć. Neutraliziramo ga s pomoću nekoliko neovisnih mjera, tako da je praktični rizik sveden na nulu.

Lozinka je jednokratna: služi za točno jedno povezivanje, nigdje se kod nas ne pohranjuje i nikada se ponovno ne upotrebljava. Privatni ključ nikada se ne šalje mrežom — naknadna se autentifikacija oslanja na par ključeva (autentifikacija javnim ključem, pubkey), a ne na lozinku.

Odmah nakon postavljanja na poslužitelju se onemogućuju autentifikacija lozinkom i prijava kao root, mijenja se SSH port, a pristup se prebacuje isključivo na ključeve. Od tog trenutka čak ni presretnuta lozinka ništa ne otključava.

Svako daljnje upravljačko povezivanje provjerava prikvačeni otisak poslužitelja (host-key pinning) — poslužitelj podmetnut «u sredini» biva odbijen.

Kao rezultat toga, presretanje bi bilo moguće samo napadaču koji je fizički prisutan na mrežnoj putanji između nas i poslužitelja tijekom tih nekoliko sekundi početne instalacije — pa čak i u tom krajnjem slučaju presretnuti podaci odmah postaju bezvrijedni.

03Fizički pristup poslužitelju u rukama je vašeg VPS pružatelja.

To je svojstvo svakog iznajmljenog poslužitelja, ne samo našeg: snimke stanja (snapshots), rescue način rada i slično dostupni su pružatelju, i nikakav softver od toga ne štiti. S druge strane, izbor pouzdanog pružatelja u vašim je rukama, a poslužitelj je u potpunosti vaš — pružatelja možete promijeniti, a stroj obrisati u bilo kojem trenutku.

04Nepoznate ranjivosti (0-day) uvijek postoje.

Nitko ne može obećati apsolutnu zaštitu — nove se ranjivosti pojavljuju u svakom softveru. Što mi činimo: sigurnosne se nadogradnje instaliraju automatski, a ispravci koji zahtijevaju ponovno pokretanje (jezgra, ponekad OpenSSH) primjenjuju se nakon ponovnog pokretanja — ručnog ili zakazanog (pogledajte SR-11).

05E-pošta se pohranjuje — u najmanjoj mjeri i radi funkcije.

Vaša e-pošta za prijavu, i e-pošta krajnjih korisnika u nekoliko servisnih slučajeva (pogledajte SR-6). Čuva se samo onoliko koliko je potrebno i automatski se briše (pogledajte rizik 9).

06Prijava se obavlja kodom putem e-pošte — zasebnog 2FA još nema.

Budući da se prijava oslanja na jednokratni kod iz e-pošte, vaš je poštanski sandučić zapravo ključ računa — vrijedi ga dobro zaštititi. Drugi faktor još ne postoji: razumno za ovu fazu, ali dobro je znati.

07Podaci se čuvaju ograničeno vrijeme i automatski se brišu.

Osobne podatke čuvamo samo onoliko dugo koliko ih neka operacija treba, a zatim ih automatski brišemo. E-pošta se uklanja iz reda čim je poruka poslana, a sirovi sadržaj uspješnog platnog događaja čim je obrađen.

Samo jedno traje dulje: platni događaji koji čekaju ponovni pokušaj ili ručnu provjeru. Njihov se izvorni sadržaj ne čuva neograničeno, nego do kraja razdoblja od 90 dana bez aktivnosti, nakon čega se osobni podaci automatski brišu.

Samoposlužna opcija «izbriši moje podatke» u sučelju još ne postoji — u planu je. U međuvremenu možete izbrisati svoj račun, zajedno s povezanim podacima, obraćanjem podršci.

08Pretplatnički tokeni ne istječu.

Poveznica /sub je trajni bearer token do ručnog opoziva ili brisanja korisnika; nema automatskog isteka ni rotacije (procurjela poveznica ostaje živa).

09Sigurnosne kopije korisnika iznose podatke izvan vašeg poslužitelja.

Ako omogućite izvoz sigurnosnih kopija na Google Drive ili S3, korisnički podaci napuštaju vaš poslužitelj, a njihova zaštita tada ovisi o vašem oblaku — ovaj ih izvještaj ne pokriva zasebno. To je vaš svjestan izbor: značajku uključujete sami.

ne vjerujte nam na riječ

Kako to provjeriti.

Svaka tvrdnja iznad je javna oklada. Pozivamo vas da pronađete gdje smo pogriješili ili uljepšali:

staza A

Staza A — klasične ranjivosti (RCE, zaobilaženje autorizacije, IDOR, curenja i slično).

staza B

Staza B — pobijanje ovog izvještaja: dokažite da je bilo koji SR-N netočan, dobijte nagradu, a mi javno objavljujemo ispravak.

Pronašli ste nešto?

Pišite nam s ponovljivim proof of conceptom. Odgovaramo u roku od 72 sata i trijažu obavljamo interno.

security@createyourvpn.com/.well-known/security.txt · 90 dana šutnje · sigurna luka