Ndoano zinazoendeshwa bila hitilafu na bado zinaripoti faili iliyokosekana kwa kawaida hutazama mahali pasipofaa, si kwamba zinashindwa katika kazi yao. Njia jamaa katika script hutatuliwa kwa kuzingatia saraka ya kazi ya mchakato, na huduma huanza na saraka ya kazi ambayo wewe hukuchagua. Faili iliyo kando ya script na faili ambayo mchakato hufungua ni kitu kimoja tu wakati kitu kinazifunga. Pengo hilo hufafanua sehemu kubwa ya kushindwa kwa ndoano ambazo husomwa vibaya kama matatizo ya ruhusa.

Angalia njia kabla ya ruhusa, kwa sababu hitilafu ya ruhusa kwenye faili isiyofaa bado ni faili isiyofaa.

Njia jamaa hutatuliwa kwa kuzingatia mchakato, si faili

Wakati script inaita open("policy.json"), kerneli hutatua jina kwa kuzingatia saraka ya kazi ya sasa ya mchakato. Hakuna chochote kutoka mahali pa script yenyewe kinachoshiriki katika utafutaji huo. OpenVPN huanzisha ndoano kutoka saraka inayochagua yenyewe, na chaguo cd linaweza kuibadilisha, kwa hivyo script iliyojaribiwa kwa mkono kutoka folda yake huishi tofauti daemon inapoiendesha. Jaribio la mkono hupita, uendeshaji wa huduma hushindikana, na mstari wa kumbukumbu hutaja jina lililokosekana pekee.

Python huonyesha mahali pa script kama __file__, na hilo ndilo hufanya ufungaji uwezekane. Path(__file__).resolve().parent / "policy.json" hujenga njia kutoka faili badala ya kutoka mchakato. Mstari huo mmoja huondoa utegemezi wa saraka ya kazi bila kubadilisha chochote katika mapendeleo.

Funga njia kwa makusudi, kisha angalia resolve hufanya nini

resolve() hufuata viungo vya mfano, kwa hivyo usakinishaji unaounganisha ndoano mahali pake hufunga kwenye lengo la kiungo, si kwenye saraka inayoshikilia kiungo. Hilo kwa kawaida ndilo unalotaka kwa usambazaji wenye matoleo, na ni kosa kwa mpangilio unaotarajia data kando ya kiungo cha mfano. Amua usambazaji unamaanisha kipi, na andika msimbo kulingana na hilo badala ya kugundua tofauti katika uzalishaji. Path(__file__).parent bila resolve() huhifadhi saraka ya kiungo yenyewe.

Ikiwa data ni ya mfano na si ya programu, chukua njia kamili kutoka kwenye usanidi. Kuweka mahali kwa msimbo mgumu hufunga ndoano kwenye mpangilio mmoja wa mwenyeji.

Pitia mipaka minne kwa mpangilio

Anza na saraka ya kazi: linganisha WorkingDirectory, chaguo cd la OpenVPN na kifuniko chochote kinachobadilisha saraka kabla ya exec. Kisha thibitisha mahali palipotatuliwa, kwa sababu faili yenye jina linalofanana katika usambazaji mwingine inaweza kujibu utafutaji na kuficha kosa. Kinachofuata ni mtazamo wa mfumo wa faili: chroot au nafasi ya majina ya mount ya huduma zinaweza kufanya njia kamili ya mwenyeji kuwa haipo kabisa. Mwisho ni utambulisho wa ufikiaji, ambayo ni swali lililotengana na kuonekana.

ProtectHome na PrivateTmp huficha maeneo tofauti, na hakuna kati yao linavyoonekana katika orodha ya saraka iliyochukuliwa kutoka kwa mwenyeji. Njia iliyopo kwa root katika shell inaweza kuwa isiyoonekana ndani ya nafasi ya majina ya kitengo, na ndiyo sababu kujaribu amri hiyo hiyo nje ya huduma huthibitisha kidogo sana.

Rekebisha utafutaji bila kupanua huduma

Kufunga njia hutatua mpaka wa kwanza pekee. Hakifichui saraka ambayo huduma inaificha, na hakimpi akaunti isiyo na mapendeleo ufikiaji wa faili ya root pekee. Kuinua script-security hubadilisha script gani OpenVPN itaendesha; hakuna athari yake kwa mahali jina jamaa linatatuliwa. Kubadilisha saraka ya kazi kwa huduma nzima ni pana kuliko tatizo, kwa sababu kila njia nyingine jamaa ya cheti, kumbukumbu au msaidizi husogea pamoja nayo.

Pendelea marekebisho membamba: njia thabiti katika script, thamani bayana ya usanidi kwa data ya mfano, na umiliki wa faili unaoendana na akaunti ambayo ndoano huendeshwa chini yake.

Rekodi ushahidi unaotaja mpaka

Ripoti muhimu ya kushindwa ina mambo matatu: njia kamili ambayo ndoano ilijaribu, mazingira yaliyoizalisha, na mpaka gani ulikataa. Chapisha njia iliyotatuliwa na ubaguzi bila kumwaga yaliyomo ya faili. Utatu huo hutenganisha ufungaji mbaya na mount iliyofichwa na kukataa ruhusa, na hizo ni marekebisho matatu tofauti.

Madai kwamba root anaweza kusoma faili kutoka terminal hujibu mmoja wa maswali hayo na hakuna hata mmoja wa mengine. Badala yake jaribu kutoka mazingira ya huduma yenyewe.

Makala zinazohusiana