Dipende dall'attuale implementazione del server.
Sebbene sembri che node.js sia avviato come root, manterrà questi privilegi altri server (come Apache o nginx) solo come root e poi come privilegi. Un tipico progetto, ad esempio, consiste nell'avere un processo master che si collega ai socket con i privilegi necessari e quindi genera un figlio che rinuncia permanentemente a tutti i privilegi di root prima di elaborare i dati dalla rete. Ciò è possibile poiché i socket di ascolto sono ereditati dal processo padre e le autorizzazioni root erano necessarie solo per collegare il socket a una porta privilegiata ma non per accettare connessioni sul socket stabilito.
Ad esempio con nginx vedrai qualcosa di simile al seguente:
$ ps -ax -o user,pid,ppid,cmd | grep nginx
root 14746 1 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
www-data 14747 14746 nginx: worker process
www-data 14748 14746 nginx: worker process
Il primo processo mostrato è il master, eseguito come root. Gli altri sono i lavoratori avviati dal master in esecuzione come% non privilegiato conwww-data
. Solo questi lavoratori non privilegiati elaboreranno l'input dell'utente e quindi, in caso di compromissione dovuta ad alcuni input imprevisti dalla rete, verrà compromesso solo l'utente non privilegiato. Ovviamente, un utente malintenzionato potrebbe quindi provare a eseguire un'escalation dei privilegi locali utilizzando bug aggiuntivi nell'host, ma si tratta di un problema diverso.