<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>SUID on My personal blog</title>
        <link>https://www.matteobianchi.eu/tags/suid/</link>
        <description>Recent content in SUID on My personal blog</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>en</language>
        <lastBuildDate>Tue, 03 Feb 2026 09:00:00 +0100</lastBuildDate><atom:link href="https://www.matteobianchi.eu/tags/suid/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>Permessi speciali: SUID, SGID, sticky</title>
        <link>https://www.matteobianchi.eu/p/permessi-speciali-suid-sgid/</link>
        <pubDate>Tue, 03 Feb 2026 09:00:00 +0100</pubDate>
        
        <guid>https://www.matteobianchi.eu/p/permessi-speciali-suid-sgid/</guid>
        <description>&lt;img src="https://www.matteobianchi.eu/p/permessi-speciali-suid-sgid/cover.png" alt="Featured image of post Permessi speciali: SUID, SGID, sticky" /&gt;&lt;h2 id=&#34;perché-conta&#34;&gt;Perché conta
&lt;/h2&gt;&lt;p&gt;I &lt;a class=&#34;link&#34; href=&#34;https://www.matteobianchi.eu/p/permessi-dei-file/&#34; &gt;permessi normali&lt;/a&gt; decidono &lt;em&gt;chi accede&lt;/em&gt; a un file. I
permessi speciali cambiano &lt;em&gt;con quali privilegi gira&lt;/em&gt; un programma — ed è qui che nascono le scalate a
root. Un binario &lt;strong&gt;SUID-root&lt;/strong&gt; viene eseguito con i poteri di root &lt;em&gt;da chiunque&lt;/em&gt; lo lanci: se quel
binario ha una falla, chiunque può sfruttarla per diventare root. È per questo che l&amp;rsquo;inventario dei
SUID è uno dei primi controlli di un pentester — e deve essere uno dei tuoi.&lt;/p&gt;
&lt;h2 id=&#34;i-tre-bit&#34;&gt;I tre bit
&lt;/h2&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;hl&#34;&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;hl&#34;&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;SUID (4000): il processo gira con l&amp;#39;UID del PROPRIETARIO del file, non di chi lo lancia
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line hl&#34;&gt;&lt;span class=&#34;cl&#34;&gt;SGID (2000): gira con il GID del gruppo del file (sui file); eredita il gruppo (sulle dir)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line hl&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Sticky (1000): in una dir condivisa, solo l&amp;#39;owner di un file può cancellarlo (es. /tmp)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Nell&amp;rsquo;output di &lt;code&gt;ls&lt;/code&gt; appaiono al posto della &lt;code&gt;x&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ls -l /usr/bin/passwd
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# -rwsr-xr-x 1 root root ...   la &amp;#39;s&amp;#39; al posto della x dell&amp;#39;owner = SUID&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#    ^&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ls -ld /tmp
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# drwxrwxrwt ... la &amp;#39;t&amp;#39; finale = sticky bit&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;code&gt;passwd&lt;/code&gt; &lt;strong&gt;deve&lt;/strong&gt; essere SUID-root: un utente normale lo lancia, ma deve scrivere in &lt;code&gt;/etc/shadow&lt;/code&gt;
(di root). Il SUID è il meccanismo che glielo consente in modo controllato — il problema è quando è
applicato a binari che non ne hanno bisogno.&lt;/p&gt;
&lt;h2 id=&#34;trovarli-tutti&#34;&gt;Trovarli tutti
&lt;/h2&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# inventario completo dei SUID e SGID sul sistema&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;find / -xdev &lt;span class=&#34;se&#34;&gt;\(&lt;/span&gt; -perm -4000 -o -perm -2000 &lt;span class=&#34;se&#34;&gt;\)&lt;/span&gt; -type f -exec ls -l &lt;span class=&#34;o&#34;&gt;{}&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\;&lt;/span&gt; 2&amp;gt;/dev/null
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Confronta la lista con ciò che ti aspetti. I SUID-root legittimi sono pochi e noti: &lt;code&gt;passwd&lt;/code&gt;, &lt;code&gt;su&lt;/code&gt;,
&lt;code&gt;sudo&lt;/code&gt;, &lt;code&gt;mount&lt;/code&gt;, &lt;code&gt;ping&lt;/code&gt; (sulle distro più vecchie), &lt;code&gt;pkexec&lt;/code&gt;. &lt;strong&gt;Tutto il resto va messo in
discussione.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&#34;perché-un-suid-di-troppo-è-una-scalata-a-root&#34;&gt;Perché un SUID di troppo è una scalata a root
&lt;/h2&gt;&lt;p&gt;Il rischio concreto: molti programmi comuni, se SUID-root, permettono di eseguire comandi arbitrari con
i privilegi di root. Il catalogo &lt;strong&gt;GTFOBins&lt;/strong&gt; documenta esattamente questo. Esempio classico: se &lt;code&gt;find&lt;/code&gt;
fosse SUID-root (non lo è di default, ma capita per errore)…&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# SE find è SUID-root, questa riga dà una shell di root a chiunque:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;find . -exec /bin/sh -p &lt;span class=&#34;se&#34;&gt;\;&lt;/span&gt; -quit
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Non è una falla di &lt;code&gt;find&lt;/code&gt;: è il SUID messo dove non serve. La lezione: &lt;strong&gt;ogni bit SUID è una delega di
privilegi&lt;/strong&gt;, e va trattato con lo stesso sospetto di un account con poteri di root.&lt;/p&gt;
&lt;h2 id=&#34;ridurre-e-togliere&#34;&gt;Ridurre e togliere
&lt;/h2&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# togliere il SUID da un binario che non ne ha bisogno&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;chmod u-s /percorso/al/binario
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# montare le partizioni dati con nosuid: i bit SUID lì vengono IGNORATI dal kernel&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#  /etc/fstab:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#  /dev/sdb1  /data  ext4  defaults,nosuid,nodev,noexec  0 2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;L&amp;rsquo;opzione di mount &lt;strong&gt;&lt;code&gt;nosuid&lt;/code&gt;&lt;/strong&gt; è una difesa forte: su partizioni che contengono solo dati (&lt;code&gt;/home&lt;/code&gt;,
&lt;code&gt;/tmp&lt;/code&gt;, &lt;code&gt;/data&lt;/code&gt;), dice al kernel di ignorare qualsiasi bit SUID. Così, anche se un attaccante riesce a
depositare lì un binario SUID-root, non gli serve a nulla. Insieme a &lt;code&gt;nodev&lt;/code&gt; e &lt;code&gt;noexec&lt;/code&gt; è una tripletta
classica dell&amp;rsquo;hardening del filesystem.&lt;/p&gt;


&lt;details&gt;
&lt;summary&gt;&lt;strong&gt;Domanda:&lt;/strong&gt; i binari SUID del sistema li ha messi la distribuzione e sono testati da anni. Perché preoccuparsi: non è paranoia inventariarli e montare mezzo sistema con nosuid?&lt;/summary&gt;
&lt;p&gt;I SUID della distribuzione sono il &lt;em&gt;caso buono&lt;/em&gt;, ed è vero che sono pochi, noti e rivisti; il
rischio non viene da loro ma da tutto ciò che si aggiunge intorno, e l&#39;inventario serve proprio a
separare i due. Primo, il software di terze parti: pacchetti esterni, installer manuali, build custom e
vecchi programmi aggiungono i propri SUID, a volte senza che tu te ne accorga, e quelli non hanno gli
anni di revisione dei binari core. Un solo SUID-root scritto male è una scalata a root pronta per
chiunque abbia già un accesso non privilegiato — ed è esattamente così che un attaccante trasforma un
accesso limitato (un web server compromesso, un account rubato) in controllo totale. Secondo, anche i
SUID legittimi hanno avuto vulnerabilità gravi reali: pensa a pkexec, sudo, o ad altri binari di sistema
che negli anni hanno avuto CVE di escalation a root — &#34;testato da anni&#34; non significa &#34;immune&#34;, significa
&#34;finora&#34;. Non puoi fare molto contro una CVE in sudo se non aggiornare, ma puoi ridurre il resto della
superficie. Terzo, l&#39;inventario non è paranoia, è &lt;em&gt;baseline&lt;/em&gt;: la lista dei SUID del tuo sistema
dovrebbe essere corta e stabile, così quando ne compare uno nuovo lo noti — e un SUID-root apparso dal
nulla è un segnale classico di compromissione (un attaccante che si lascia una backdoor di persistenza).
Sul nosuid: non monti &#34;mezzo sistema&#34; così, monti le partizioni di &lt;em&gt;soli dati&lt;/em&gt; dove un SUID non ha
alcuna ragione legittima di esistere; i binari di sistema stanno in &lt;code&gt;/usr&lt;/code&gt;, che resta normale.
È una difesa quasi gratuita che annulla un&#39;intera tecnica di attacco (depositare un SUID in /tmp o /home).
Il costo è un comando di inventario ogni tanto e tre parole in fstab; il beneficio è chiudere la via di
escalation più diretta che esista.&lt;/p&gt;
&lt;/details&gt;


&lt;h2 id=&#34;conclusione&#34;&gt;Conclusione
&lt;/h2&gt;&lt;p&gt;SUID e SGID cambiano i privilegi d&amp;rsquo;esecuzione: potentissimi dove servono (pochi binari), pericolosi
ovunque altro. Inventariali, togli quelli inutili, e monta le partizioni dati con &lt;code&gt;nosuid,nodev,noexec&lt;/code&gt;.
Il SUID è un modo &lt;em&gt;implicito&lt;/em&gt; di dare privilegi; esiste anche un modo &lt;em&gt;esplicito&lt;/em&gt; e controllato di farlo
— concedere a una persona il potere di eseguire comandi da root in modo tracciato: è
&lt;a class=&#34;link&#34; href=&#34;https://www.matteobianchi.eu/p/sudo-ed-escalation/&#34; &gt;sudo&lt;/a&gt;, prossimo capitolo.&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
