<?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>Ars Longa, Vita Brevis &#187; безопасность</title>
	<atom:link href="http://blog.sjinks.pro/tag/tag-security/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.sjinks.pro</link>
	<description>Quod scripsi, scripsi</description>
	<lastBuildDate>Mon, 06 Feb 2012 17:56:02 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Исправление проблемы обхода хранителя экрана в X11</title>
		<link>http://blog.sjinks.pro/security/960-fix-bypass-screensaver-locker/</link>
		<comments>http://blog.sjinks.pro/security/960-fix-bypass-screensaver-locker/#comments</comments>
		<pubDate>Thu, 19 Jan 2012 12:18:51 +0000</pubDate>
		<dc:creator>Vladimir</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Безопасность]]></category>
		<category><![CDATA[безопасность]]></category>
		<category><![CDATA[уязвимость]]></category>

		<guid isPermaLink="false">http://blog.sjinks.pro/?p=960</guid>
		<description><![CDATA[Программистов всё больше, а профессионалов всё меньше В X.Org Server 1.11 обнаружена уязвимость, позволяющая через манипуляции с клавиатурой обойти режим блокировки экрана и получить доступ к заблокированному рабочему окружению пользователя. Подробности либо по ссылке выше, либо на OpenNet. Исправление: в файле /usr/share/X11/xkb/compat/xfree86 закомментировать следующие строки: interpret XF86_Ungrab { action = Private(type=0x86, data=&#34;Ungrab&#34;); }; interpret XF86_ClearGrab [...]<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/security/960-fix-bypass-screensaver-locker/">источник</a> обязательно.</p>]]></description>
			<content:encoded><![CDATA[<h2><em>Программистов всё больше, а профессионалов всё меньше</em></h2>
<p>В X.Org Server 1.11 <a href="http://gu1.aeroxteam.fr/2012/01/19/bypass-screensaver-locker-program-xorg-111-and-up/">обнаружена уязвимость</a>, позволяющая через манипуляции с клавиатурой обойти режим блокировки экрана и получить доступ к заблокированному рабочему окружению пользователя.</p>
<p>Подробности либо по ссылке выше, либо на <a href="http://www.opennet.ru/opennews/art.shtml?num=32844">OpenNet</a>.<span id="more-960"></span></p>
<p>Исправление: в файле <code>/usr/share/X11/xkb/compat/xfree86</code> закомментировать следующие строки:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p9602">
        <div class="code text" id="p960code2">
&nbsp; &nbsp; interpret XF86_Ungrab {<br />
&nbsp; &nbsp; &nbsp; &nbsp; action = Private(type=0x86, data=&quot;Ungrab&quot;);<br />
&nbsp; &nbsp; };<br />
&nbsp; &nbsp; interpret XF86_ClearGrab {<br />
&nbsp; &nbsp; &nbsp; &nbsp; action = Private(type=0x86, data=&quot;ClsGrb&quot;);<br />
&nbsp; &nbsp; };
        </div>
    </div>
</div>

<p>После чего перезапустить X Server.</p>
<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/security/960-fix-bypass-screensaver-locker/">источник</a> обязательно.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.sjinks.pro/security/960-fix-bypass-screensaver-locker/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>AOL Postmaster взломан!</title>
		<link>http://blog.sjinks.pro/security/935-aol-postmaster-hacked/</link>
		<comments>http://blog.sjinks.pro/security/935-aol-postmaster-hacked/#comments</comments>
		<pubDate>Sat, 13 Aug 2011 12:26:58 +0000</pubDate>
		<dc:creator>Wandering Soul</dc:creator>
				<category><![CDATA[Безопасность]]></category>
		<category><![CDATA[AOL]]></category>
		<category><![CDATA[безопасность]]></category>
		<category><![CDATA[взлом]]></category>

		<guid isPermaLink="false">http://blog.sjinks.pro/?p=935</guid>
		<description><![CDATA[A0L S3RV3RZ R00T3D BY H0DLUM L0LZ! Ибо нефиг себя по-свински вести. В исходнике домашней страницы присутствует такой код: &#60;!-- Z0M6? Congratz! You&#039;ve just discovered AOL priv8 dataZ --&#62; &#60;!-- 3nj0y! --&#62; &#60;!-- [+] /data/servers/postmaster.info.aol.com/ --&#62; &#60;!-- [+] DB Host : dbsmsq-m01.mail.aol.com --&#62; &#60;!-- DB User : grjones --&#62; &#60;!-- DB Passwd : grj123 --&#62; &#60;!-- [...]<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/security/935-aol-postmaster-hacked/">источник</a> обязательно.</p>]]></description>
			<content:encoded><![CDATA[<h2><em>A0L S3RV3RZ R00T3D BY H0DLUM L0LZ!</em></h2>
<p>Ибо нефиг себя по-свински вести.</p>
<p><a href="http://static.sjinks.info/wp-content/uploads/2011/08/aol-postmaster-hacked.png"><img src="http://static.sjinks.info/wp-content/uploads/2011/08/aol-postmaster-hacked.png" alt="" title="AOL Postmaster Hacked" width="647" height="905" class="alignnone size-full wp-image-936" /></a><span id="more-935"></span></p>
<p>В исходнике домашней страницы присутствует такой код:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p9354">
        <div class="code html" id="p935code4">
<span class="sc-2">&lt;!-- Z0M6? Congratz! You've just discovered AOL priv8 dataZ --&gt;</span><br />
<span class="sc-2">&lt;!-- 3nj0y! &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --&gt;</span><br />
<span class="sc-2">&lt;!-- [+] /data/servers/postmaster.info.aol.com/ --&gt;</span><br />
<br />
<span class="sc-2">&lt;!-- [+] DB Host &nbsp; : dbsmsq-m01.mail.aol.com --&gt;</span><br />
<span class="sc-2">&lt;!-- &nbsp; &nbsp; DB User &nbsp; : grjones &nbsp; &nbsp; &nbsp; &nbsp;--&gt;</span><br />
<span class="sc-2">&lt;!-- &nbsp; &nbsp; DB Passwd : grj123 &nbsp; &nbsp; &nbsp; &nbsp; --&gt;</span><br />
<span class="sc-2">&lt;!-- &nbsp; &nbsp; DB Name &nbsp; : postmaster &nbsp; &nbsp; --&gt;</span><br />
<br />
<span class="sc-2">&lt;!-- [+] Private key : 6LcYbQYAAAAAANfxC3JrgDabK4CrqmYaZseDHSJy &nbsp;--&gt;</span><br />
<span class="sc-2">&lt;!-- &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --&gt;</span><br />
<span class="sc-2">&lt;!-- &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --&gt;</span><br />
<br />
<span class="sc-2">&lt;!-- [+] cat /etc/shadow</span><br />
<span class="sc-2">root:$1$vtIy50fc$H1fN651eQ/mFj58viwulU0:14162:0:99999:7:::</span><br />
<span class="sc-2">bin:*:13469:0:99999:7:::</span><br />
<span class="sc-2">daemon:*:13469:0:99999:7:::</span><br />
<span class="sc-2">adm:*:13469:0:99999:7:::</span><br />
<span class="sc-2">sync:*:13469:0:99999:7:::</span><br />
<span class="sc-2">shutdown:*:13469:0:99999:7:::</span><br />
<span class="sc-2">halt:*:13469:0:99999:7:::</span><br />
<span class="sc-2">mail:*:13469:0:99999:7:::</span><br />
<span class="sc-2">operator:*:13469:0:99999:7:::</span><br />
<span class="sc-2">ftp:*:13469:0:99999:7:::</span><br />
<span class="sc-2">nobody:*:13469:0:99999:7:::</span><br />
<span class="sc-2">dbus:!!:13469:0:99999:7:::</span><br />
<span class="sc-2">vcsa:!!:13469:0:99999:7:::</span><br />
<span class="sc-2">rpm:!!:13469:0:99999:7:::</span><br />
<span class="sc-2">haldaemon:!!:13469:0:99999:7:::</span><br />
<span class="sc-2">netdump:!!:13469:0:99999:7:::</span><br />
<span class="sc-2">nscd:!!:13469:0:99999:7:::</span><br />
<span class="sc-2">sshd:!!:13469:0:99999:7:::</span><br />
<span class="sc-2">smmsp:!!:13469:0:99999:7:::</span><br />
<span class="sc-2">ntp:!!:13469:0:99999:7:::</span><br />
<span class="sc-2">jobi:!!:13471:0:99999:7:::</span><br />
<span class="sc-2">aolfood:!!:13612:0:99999:7:::</span><br />
<span class="sc-2">wuts_adm:Kerberos:::::::</span><br />
<span class="sc-2">publish:NP:13901:0:99999:7:::</span><br />
<span class="sc-2">kellyg:Kerberos:13901:0:99999:7:::</span><br />
<span class="sc-2">pmanees:Kerberos:13916:0:99999:7:::</span><br />
<span class="sc-2">aolrun:Kerberos:10162::::::</span><br />
<span class="sc-2">quantum:Kerberos:10162:::::: &nbsp; &nbsp; &nbsp; --&gt;</span>
        </div>
    </div>
</div>

<p>Облажались ребята по полной программе…</p>
<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/security/935-aol-postmaster-hacked/">источник</a> обязательно.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.sjinks.pro/security/935-aol-postmaster-hacked/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Корейцы разбушевались…</title>
		<link>http://blog.sjinks.pro/security/928-suspicious-activity-from-korea/</link>
		<comments>http://blog.sjinks.pro/security/928-suspicious-activity-from-korea/#comments</comments>
		<pubDate>Fri, 05 Aug 2011 03:40:53 +0000</pubDate>
		<dc:creator>Vladimir</dc:creator>
				<category><![CDATA[Безопасность]]></category>
		<category><![CDATA[iptables]]></category>
		<category><![CDATA[LFD]]></category>
		<category><![CDATA[ssh]]></category>
		<category><![CDATA[безопасность]]></category>

		<guid isPermaLink="false">http://blog.sjinks.pro/?p=928</guid>
		<description><![CDATA[Не к добру… Сегодня с утра наблюдается какая-то повышенная активность хакеров с корейскими IP-адресами. Были замечены попытки подбора паролей на SSH со следующих IP-адресов: 14.36.36.243 14.32.0.0/11 14.42.239.118 59.2.171.221 59.0.0.0/11 59.2.184.48 59.17.15.76 59.29.157.41 61.76.108.200 61.72.0.0/14 119.195.195.78 119.192.0.0/11 119.199.168.176 121.131.45.67 121.128.0.0/11 121.146.29.82 121.159.193.229 121.165.92.190 121.160.0.0/11 121.169.48.28 121.187.210.87 175.209.131.3 175.192.0.0/12 220.73.5.10 220.72.0.0/12 220.82.171.129 221.153.60.141 221.144.0.0/12 222.97.10.66 222.96.0.0/12 Aug [...]<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/security/928-suspicious-activity-from-korea/">источник</a> обязательно.</p>]]></description>
			<content:encoded><![CDATA[<h2><em>Не к добру…</em></h2>
<p>Сегодня с утра наблюдается какая-то повышенная активность хакеров с корейскими IP-адресами.</p>
<p>Были замечены попытки подбора паролей на <a href="http://blog.sjinks.pro/tag/ssh/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  ssh">SSH</a> со следующих IP-адресов:</p>
<table class="bordered" cellpadding="2">
<tbody>
<tr>
<td>14.36.36.243</td>
<td rowspan="2">14.32.0.0/11</td>
</tr>
<tr>
<td>14.42.239.118</td>
</tr>
<tr>
<td>59.2.171.221</td>
<td rowspan="4">59.0.0.0/11</td>
</tr>
<tr>
<td>59.2.184.48</td>
</tr>
<tr>
<td>59.17.15.76</td>
</tr>
<tr>
<td>59.29.157.41</td>
</tr>
<tr>
<td>61.76.108.200</td>
<td>61.72.0.0/14</td>
</tr>
<tr>
<td>119.195.195.78</td>
<td rowspan="2">119.192.0.0/11</td>
</tr>
<tr>
<td>119.199.168.176</td>
</tr>
<tr>
<td>121.131.45.67</td>
<td rowspan="3">121.128.0.0/11</td>
</tr>
<tr>
<td>121.146.29.82</td>
</tr>
<tr>
<td>121.159.193.229</td>
</tr>
<tr>
<td>121.165.92.190</td>
<td rowspan="3">121.160.0.0/11</td>
</tr>
<tr>
<td>121.169.48.28</td>
</tr>
<tr>
<td>121.187.210.87</td>
</tr>
<tr>
<td>175.209.131.3</td>
<td>175.192.0.0/12</td>
</tr>
<tr>
<td>220.73.5.10</td>
<td rowspan="2">220.72.0.0/12</td>
</tr>
<tr>
<td>220.82.171.129</td>
</tr>
<tr>
<td>221.153.60.141</td>
<td>221.144.0.0/12</td>
</tr>
<tr>
<td>222.97.10.66</td>
<td>222.96.0.0/12</td>
</tr>
</tbody>
</table>
<p><span id="more-928"></span></p>
          
<div class="codebox">
    <div class="the_code" style="" id="p9289">
        <div class="code text" id="p928code9">
Aug &nbsp;5 02:33:49 sjinks sshd[14588]: Did not receive identification string from 220.73.5.10<br />
Aug &nbsp;5 02:33:49 sjinks sshd[14587]: Did not receive identification string from 220.73.5.10<br />
Aug &nbsp;5 02:33:49 sjinks sshd[14589]: Did not receive identification string from 220.73.5.10<br />
Aug &nbsp;5 02:33:49 sjinks sshd[14590]: Did not receive identification string from 220.73.5.10<br />
Aug &nbsp;5 02:33:49 sjinks sshd[14591]: Did not receive identification string from 220.73.5.10<br />
Aug &nbsp;5 02:33:57 sjinks sshd[14592]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=220.73.5.10 &nbsp;user=root<br />
Aug &nbsp;5 02:33:57 sjinks sshd[14597]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=220.73.5.10 &nbsp;user=root<br />
<br />
Aug &nbsp;5 03:18:40 sjinks sshd[25082]: Did not receive identification string from 59.29.157.41<br />
Aug &nbsp;5 03:18:40 sjinks sshd[25083]: Did not receive identification string from 59.29.157.41<br />
Aug &nbsp;5 03:18:41 sjinks sshd[25084]: Did not receive identification string from 59.29.157.41<br />
Aug &nbsp;5 03:18:41 sjinks sshd[25085]: Did not receive identification string from 59.29.157.41<br />
Aug &nbsp;5 03:18:41 sjinks sshd[25086]: Did not receive identification string from 59.29.157.41<br />
Aug &nbsp;5 03:18:49 sjinks sshd[25094]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=59.29.157.41 &nbsp;user=root<br />
Aug &nbsp;5 03:18:49 sjinks sshd[25091]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=59.29.157.41 &nbsp;user=root<br />
<br />
Aug &nbsp;5 03:18:56 sjinks sshd[25111]: Did not receive identification string from 221.153.60.141<br />
Aug &nbsp;5 03:18:56 sjinks sshd[25112]: Did not receive identification string from 221.153.60.141<br />
Aug &nbsp;5 03:18:56 sjinks sshd[25113]: Did not receive identification string from 221.153.60.141<br />
Aug &nbsp;5 03:18:56 sjinks sshd[25114]: Did not receive identification string from 221.153.60.141<br />
Aug &nbsp;5 03:18:56 sjinks sshd[25115]: Did not receive identification string from 221.153.60.141<br />
Aug &nbsp;5 03:19:04 sjinks sshd[25145]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=221.153.60.141 &nbsp;user=root<br />
Aug &nbsp;5 03:19:04 sjinks sshd[25147]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=221.153.60.141 &nbsp;user=root<br />
<br />
Aug &nbsp;5 03:19:49 sjinks sshd[25248]: Did not receive identification string from 121.169.48.28<br />
Aug &nbsp;5 03:19:49 sjinks sshd[25249]: Did not receive identification string from 121.169.48.28<br />
Aug &nbsp;5 03:19:49 sjinks sshd[25250]: Did not receive identification string from 121.169.48.28<br />
Aug &nbsp;5 03:19:49 sjinks sshd[25251]: Did not receive identification string from 121.169.48.28<br />
Aug &nbsp;5 03:19:49 sjinks sshd[25252]: Did not receive identification string from 121.169.48.28<br />
Aug &nbsp;5 03:19:57 sjinks sshd[25266]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=121.169.48.28 &nbsp;user=root<br />
Aug &nbsp;5 03:19:57 sjinks sshd[25271]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=121.169.48.28 &nbsp;user=root<br />
<br />
Aug &nbsp;5 03:21:58 sjinks sshd[26375]: Did not receive identification string from 61.76.108.200<br />
Aug &nbsp;5 03:21:58 sjinks sshd[26377]: Did not receive identification string from 61.76.108.200<br />
Aug &nbsp;5 03:21:58 sjinks sshd[26378]: Did not receive identification string from 61.76.108.200<br />
Aug &nbsp;5 03:21:58 sjinks sshd[26379]: Did not receive identification string from 61.76.108.200<br />
Aug &nbsp;5 03:22:06 sjinks sshd[26390]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=61.76.108.200 &nbsp;user=root<br />
Aug &nbsp;5 03:22:06 sjinks sshd[26393]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=61.76.108.200 &nbsp;user=root<br />
<br />
Aug &nbsp;5 03:22:01 sjinks sshd[26380]: Did not receive identification string from 220.82.171.129<br />
Aug &nbsp;5 03:22:01 sjinks sshd[26381]: Did not receive identification string from 220.82.171.129<br />
Aug &nbsp;5 03:22:01 sjinks sshd[26382]: Did not receive identification string from 220.82.171.129<br />
Aug &nbsp;5 03:22:01 sjinks sshd[26383]: Did not receive identification string from 220.82.171.129<br />
Aug &nbsp;5 03:22:01 sjinks sshd[26384]: Did not receive identification string from 220.82.171.129<br />
Aug &nbsp;5 03:22:09 sjinks sshd[26408]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=220.82.171.129 &nbsp;user=root<br />
Aug &nbsp;5 03:22:09 sjinks sshd[26425]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=220.82.171.129 &nbsp;user=root<br />
<br />
Aug &nbsp;5 03:32:59 sjinks sshd[28817]: Did not receive identification string from 59.17.15.76<br />
Aug &nbsp;5 03:32:59 sjinks sshd[28818]: Did not receive identification string from 59.17.15.76<br />
Aug &nbsp;5 03:32:59 sjinks sshd[28819]: Did not receive identification string from 59.17.15.76<br />
Aug &nbsp;5 03:32:59 sjinks sshd[28820]: Did not receive identification string from 59.17.15.76<br />
Aug &nbsp;5 03:32:59 sjinks sshd[28821]: Did not receive identification string from 59.17.15.76<br />
Aug &nbsp;5 03:33:07 sjinks sshd[28826]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=59.17.15.76 &nbsp;user=root<br />
Aug &nbsp;5 03:33:07 sjinks sshd[28828]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=59.17.15.76 &nbsp;user=root
        </div>
    </div>
</div>

<p>Всем, кто не пользуется средствами типа Fail2Ban или <a href="http://blog.sjinks.pro/tag/lfd/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  LFD">LFD</a>, самое время задуматься: отсутствие защиты и слабые пароли — короткий путь к участию в ботнете.</p>
<p>Если вы не ожидаете гостей из Кореи, очень рекомендую заблокировать эти адреса либо firewall&#8217;ом, либо через <code>/etc/hosts.deny</code>.</p>
<p>Блокирование при помощи <code><a href="http://blog.sjinks.pro/tag/iptables/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  iptables">iptables</a></code>:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p92810">
        <div class="code bash" id="p928code10">
<span class="kw1">for</span> i <span class="kw1">in</span> 14.36.36.243 14.42.239.118 59.2.171.221 59.2.184.48 59.17.15.76 \<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;59.29.157.41 61.76.108.200 119.195.195.78 119.199.168.176 121.131.45.67 \<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;121.146.29.82 121.159.193.229 121.165.92.190 121.169.48.28 121.187.210.87 \<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;175.209.131.3 220.73.5.10 220.82.171.129 221.153.60.141 222.97.10.66; <span class="kw1">do</span> \<br />
&nbsp; &nbsp; iptables <span class="re5">-A</span> INPUT <span class="re5">-s</span> <span class="re1">$i</span> <span class="re5">-j</span> DROP; \<br />
<span class="kw1">done</span>
        </div>
    </div>
</div>

<p>Агрессивное блокирование:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p92811">
        <div class="code bash" id="p928code11">
<span class="kw1">for</span> i <span class="kw1">in</span> 14.32.0.0<span class="sy0">/</span>11 59.0.0.0<span class="sy0">/</span>11 61.72.0.0<span class="sy0">/</span>14 119.192.0.0<span class="sy0">/</span>11 121.128.0.0<span class="sy0">/</span>11 \<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;121.160.0.0<span class="sy0">/</span>11 175.192.0.0<span class="sy0">/</span>12 220.72.0.0<span class="sy0">/</span>12 221.144.0.0<span class="sy0">/</span>12 222.96.0.0<span class="sy0">/</span><span class="nu0">12</span>; <span class="kw1">do</span> \<br />
&nbsp; &nbsp; iptables <span class="re5">-A</span> INPUT <span class="re5">-s</span> <span class="re1">$i</span> <span class="re5">-j</span> DROP; \<br />
<span class="kw1">done</span>
        </div>
    </div>
</div>

<p>Если <code>iptables</code> поддерживает цель <code>TARPIT</code>, можно использовать её вместо <code>DROP</code>.</p>
<p>Блокирование с использованием <code>tcpwrappers</code>: нужно добавить такие строки в <code>/etc/hosts.deny</code>:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p92812">
        <div class="code text" id="p928code12">
sshd: 14.36.36.243 14.42.239.118 59.2.171.221 59.2.184.48 59.17.15.76<br />
sshd: 59.29.157.41 61.76.108.200 119.195.195.78 119.199.168.176 121.131.45.67<br />
sshd: 121.146.29.82 121.159.193.229 121.165.92.190 121.169.48.28 121.187.210.87<br />
sshd: 175.209.131.3 220.73.5.10 220.82.171.129 221.153.60.141 222.97.10.66
        </div>
    </div>
</div>

<p>Коллеги, будьте бдительны!</p>
<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/security/928-suspicious-activity-from-korea/">источник</a> обязательно.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.sjinks.pro/security/928-suspicious-activity-from-korea/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Интеграция LFD с blocklist.de</title>
		<link>http://blog.sjinks.pro/security/924-integrate-lfd-with-blocklist/</link>
		<comments>http://blog.sjinks.pro/security/924-integrate-lfd-with-blocklist/#comments</comments>
		<pubDate>Sun, 17 Jul 2011 18:17:24 +0000</pubDate>
		<dc:creator>Wandering Soul</dc:creator>
				<category><![CDATA[Администрирование]]></category>
		<category><![CDATA[Безопасность]]></category>
		<category><![CDATA[blocklist.de]]></category>
		<category><![CDATA[CSF]]></category>
		<category><![CDATA[LFD]]></category>
		<category><![CDATA[Perl]]></category>
		<category><![CDATA[атака]]></category>
		<category><![CDATA[безопасность]]></category>
		<category><![CDATA[взлом]]></category>

		<guid isPermaLink="false">http://blog.sjinks.pro/?p=924</guid>
		<description><![CDATA[Автоматическое уведомление blocklist.de при попытке атаки на сервер LFD (Login Failure Daemon) — модуль замечательного пакета CSF (ConfigServer Security and Firewall), отвечающий за анализ системных журналов и блокировку потенциальных взломщиков. CSF умеет отправлять отчёты об атаках в формате X-ARF (в виде, пригодном для перенаправления отчёта в отдел жалоб и нарушений провайдера атакующего). Но иногда хочется сделать добро [...]<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/security/924-integrate-lfd-with-blocklist/">источник</a> обязательно.</p>]]></description>
			<content:encoded><![CDATA[<h2><em>Автоматическое уведомление <a href="http://blog.sjinks.pro/tag/blocklist-de/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  blocklist.de">blocklist.de</a> при попытке атаки на сервер</em></h2>
<p><a href="http://blog.sjinks.pro/tag/lfd/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  LFD">LFD</a> (Login Failure Daemon) — модуль замечательного пакета <a href="http://blog.sjinks.pro/tag/csf/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  CSF">CSF</a> (<a href="http://www.configserver.com/cp/csf.html">ConfigServer Security and Firewall</a>), отвечающий за анализ системных журналов и блокировку потенциальных взломщиков.</p>
<p>CSF умеет отправлять отчёты об атаках в формате X-ARF (в виде, пригодном для перенаправления отчёта в отдел жалоб и нарушений провайдера атакующего). Но иногда хочется сделать добро окружающим людям — чем быстрее узнают о потенциальном взломщике и заблокируют его IP-адрес, тем меньше вреда он успеет нанести.</p>
<p>Один из сервисов, занимающихся публикацией IP-адресов всяких взломщиков — это <a href="http://www.blocklist.de/en/index.html">Blocklist.de</a>. Этот сервис очень хорошо интегрируется с <a href="http://www.fail2ban.org/wiki/index.php/Main_Page">Fail2Ban</a>, но существует и возможность посылать отчёты и <a href="http://www.blocklist.de/en/download.html#ohnefail2ban">без Fail2Ban</a>.<span id="more-924"></span></p>
<p>У LFD есть опция вызывать пользовательский скрипт при блокировке IP-адреса нарушителя; эту опцию можно использовать для отправки отчёта в Blocklist.de.</p>
<p>Пользовательский скрипт принимает 8 параметров:</p>
<ol>
<li>IP-адрес нарушителя</li>
<li>Блокируемые порты</li>
<li>Тип блокировки (постоянная или временная)</li>
<li>Направление блокировки</li>
<li>Срок блокировки</li>
<li>Информация о причинах блокировки (например, <code>(CT) IP 91.77.88.36 (RU/Russian Federation/ppp91-77-88-36.pppoe.mtu-net.ru) found to have 348 connections</code>)</li>
<li>Строки из системного журнала/доказательства, свидетельствующие о попытке атаки</li>
<li>Триггер блокировки (идентифицирует атакуемый сервис)</li>
</ol>
<p>Ниже приведена простая версия скрипта, отправляющая уведомление об атаке в Blocklist.de:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p92415">
        <div class="code perl" id="p924code15">
<span class="co1">#! /usr/bin/perl</span><br />
<br />
<span class="kw2">use</span> strict<span class="sy0">;</span><br />
<span class="kw2">use</span> warnings<span class="sy0">;</span><br />
<span class="kw2">use</span> MIME<span class="sy0">::</span><span class="me2">Lite</span><span class="sy0">;</span> <span class="co1"># Пакет libmime-lite-perl в Debian/Ubuntu</span><br />
<br />
<span class="kw1">my</span> <span class="re0">$from</span> <span class="sy0">=</span> <span class="st_h">'security@domain.com'</span><span class="sy0">;</span><br />
<span class="kw1">my</span> <span class="re0">$to</span> &nbsp; <span class="sy0">=</span> <span class="st_h">'email@example.com'</span><span class="sy0">;</span><br />
<span class="kw1">my</span> <span class="re0">$rp</span> &nbsp; <span class="sy0">=</span> <span class="re0">$from</span><span class="sy0">;</span><br />
<br />
<span class="kw1">my</span> <span class="re0">$ip</span> &nbsp; &nbsp; &nbsp;<span class="sy0">=</span> <span class="re0">$ARGV</span><span class="br0">&#91;</span>0<span class="br0">&#93;</span> <span class="sy0">||</span> <span class="st_h">''</span><span class="sy0">;</span><br />
<span class="kw1">my</span> <span class="re0">$ports</span> &nbsp; <span class="sy0">=</span> <span class="re0">$ARGV</span><span class="br0">&#91;</span>1<span class="br0">&#93;</span> <span class="sy0">||</span> <span class="st_h">''</span><span class="sy0">;</span><br />
<span class="kw1">my</span> <span class="re0">$perm</span> &nbsp; &nbsp;<span class="sy0">=</span> <span class="re0">$ARGV</span><span class="br0">&#91;</span>2<span class="br0">&#93;</span> <span class="sy0">||</span> <span class="st_h">''</span><span class="sy0">;</span><br />
<span class="kw1">my</span> <span class="re0">$inout</span> &nbsp; <span class="sy0">=</span> <span class="re0">$ARGV</span><span class="br0">&#91;</span>3<span class="br0">&#93;</span> <span class="sy0">||</span> <span class="st_h">''</span><span class="sy0">;</span><br />
<span class="kw1">my</span> <span class="re0">$ttl</span> &nbsp; &nbsp; <span class="sy0">=</span> <span class="re0">$ARGV</span><span class="br0">&#91;</span>4<span class="br0">&#93;</span> <span class="sy0">||</span> <span class="st_h">''</span><span class="sy0">;</span><br />
<span class="kw1">my</span> <span class="re0">$msg</span> &nbsp; &nbsp; <span class="sy0">=</span> <span class="re0">$ARGV</span><span class="br0">&#91;</span>5<span class="br0">&#93;</span> <span class="sy0">||</span> <span class="st_h">''</span><span class="sy0">;</span><br />
<span class="kw1">my</span> <span class="re0">$logs</span> &nbsp; &nbsp;<span class="sy0">=</span> <span class="re0">$ARGV</span><span class="br0">&#91;</span>6<span class="br0">&#93;</span> <span class="sy0">||</span> <span class="st_h">''</span><span class="sy0">;</span><br />
<span class="kw1">my</span> <span class="re0">$trigger</span> <span class="sy0">=</span> <span class="re0">$ARGV</span><span class="br0">&#91;</span>7<span class="br0">&#93;</span> <span class="sy0">||</span> <span class="st_h">''</span><span class="sy0">;</span><br />
<br />
<span class="kw1">my</span> <span class="re0">%services</span> <span class="sy0">=</span> <span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; LF_SSHD &nbsp; &nbsp; &nbsp; <span class="sy0">=&gt;</span> <span class="st_h">'sshd'</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; LF_FTPD &nbsp; &nbsp; &nbsp; <span class="sy0">=&gt;</span> <span class="st_h">'ftpd'</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; LF_SMTPAUTH &nbsp; <span class="sy0">=&gt;</span> <span class="st_h">'smtpd'</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; LF_POP3D &nbsp; &nbsp; &nbsp;<span class="sy0">=&gt;</span> <span class="st_h">'pop3d'</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; LF_IMAPD &nbsp; &nbsp; &nbsp;<span class="sy0">=&gt;</span> <span class="st_h">'imapd'</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; LF_HTACCESS &nbsp; <span class="sy0">=&gt;</span> <span class="st_h">'httpd'</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; LF_MODSEC &nbsp; &nbsp; <span class="sy0">=&gt;</span> <span class="st_h">'httpd'</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; LF_BIND &nbsp; &nbsp; &nbsp; <span class="sy0">=&gt;</span> <span class="st_h">'named'</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; LF_SUHOSIN &nbsp; &nbsp;<span class="sy0">=&gt;</span> <span class="st_h">'httpd'</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; LF_APACHE_404 <span class="sy0">=&gt;</span> <span class="st_h">'httpd'</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; CT_LIMIT &nbsp; &nbsp; &nbsp;<span class="sy0">=&gt;</span> <span class="st_h">'portflood'</span><span class="sy0">,</span><br />
<span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
<span class="kw1">my</span> <span class="re0">$service</span> <span class="sy0">=</span> <span class="re0">$services</span><span class="br0">&#123;</span><span class="re0">$trigger</span><span class="br0">&#125;</span> <span class="sy0">||</span> <span class="st_h">''</span><span class="sy0">;</span><br />
<br />
<span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$service</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">my</span> <span class="re0">$email</span> <span class="sy0">=</span> MIME<span class="sy0">::</span><span class="me2">Lite</span><span class="sy0">-&gt;</span><span class="me1">new</span><span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; From &nbsp; &nbsp;<span class="sy0">=&gt;</span> <span class="re0">$from</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; To &nbsp; &nbsp; &nbsp;<span class="sy0">=&gt;</span> <span class="st0">&quot;$to,fail2ban<span class="es0">\@</span>blocklist.de&quot;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Subject <span class="sy0">=&gt;</span> <span class="st0">&quot;[Fail2Ban]: $service: banned $ip&quot;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Data &nbsp; &nbsp;<span class="sy0">=&gt;</span> <span class="st0">&quot;Hi,<br />
<br />
The IP $ip has just been banned by Fail2Ban<br />
<br />
$msg<br />
<br />
Lines containing IP:$ip<br />
<br />
$logs<br />
<br />
Regards,<br />
<br />
Fail2Ban&quot;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$email</span><span class="sy0">-&gt;</span><span class="me1">send</span><span class="br0">&#40;</span><span class="st0">&quot;sendmail&quot;</span><span class="sy0">,</span> <span class="st0">&quot;/usr/lib/sendmail -t -oi -r $rp&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span>
        </div>
    </div>
</div>

<p>Есть два настраиваемых параметра: <code>$from</code> и <code>$to</code>: первый используется blocklist.de для идентификации сервера, отправляющего отчёт об атаке (кроме того, адрес, указанный в <code>$from</code>, используется и как Return-Path); второй — адрес, на который отправляется копия уведомления (например, какая-нибудь CRM типа <a href="http://bestpractical.com/">RT</a>).</p>
<p>В /etc/csf/csf.conf нужно добавить строку:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p92416">
        <div class="code text" id="p924code16">
BLOCK_REPORT = &quot;/path/to/script.pl&quot;
        </div>
    </div>
</div>

<p>и перезапустить сервис.</p>
<p>Вариант данного скрипта успешно используется на нескольких серверах.</p>
<p><a href="http://static.sjinks.info/wp-content/uploads/2011/07/blocklist.de_.png"><img src="http://static.sjinks.info/wp-content/uploads/2011/07/blocklist.de_-300x169.png" alt="Blocklist.de Report" title="Blocklist.de Report" width="300" height="169" class="alignnone size-medium wp-image-925" /></a></p>
<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/security/924-integrate-lfd-with-blocklist/">источник</a> обязательно.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.sjinks.pro/security/924-integrate-lfd-with-blocklist/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SQL Injection Vulnerability в Z-Vote 1.1</title>
		<link>http://blog.sjinks.pro/security/902-sql-injection-vulnerability-z-vote/</link>
		<comments>http://blog.sjinks.pro/security/902-sql-injection-vulnerability-z-vote/#comments</comments>
		<pubDate>Fri, 25 Feb 2011 19:32:49 +0000</pubDate>
		<dc:creator>Wandering Soul</dc:creator>
				<category><![CDATA[Безопасность]]></category>
		<category><![CDATA[Патчи]]></category>
		<category><![CDATA[path disclosure]]></category>
		<category><![CDATA[SQL-инъекция]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[безопасность]]></category>
		<category><![CDATA[патч]]></category>
		<category><![CDATA[плагин]]></category>
		<category><![CDATA[уязвимость]]></category>

		<guid isPermaLink="false">http://blog.sjinks.pro/?p=902</guid>
		<description><![CDATA[Исправление уязвимостей в плагине WordPress Z-Vote 1.1 В плагине WordPress Z-Vote 1.1 была обнаружена уязвимость, позволяющая злоумышленнику выполнять произвольные запросы к базе данных (уязвимость типа «SQL-инъекция»). Уязвимость существует из-за неправильного использования метода wpdb::prepare() и отсутствия проверки и очистки переменной $_GET['zvote']. Уязвимость позволяет злоумышленнику изменять запросы к базе данных, выполнять произвольные запросы, читать или изменять конфиденциальную информацию. Вторая [...]<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/security/902-sql-injection-vulnerability-z-vote/">источник</a> обязательно.</p>]]></description>
			<content:encoded><![CDATA[<h2><em>Исправление уязвимостей в плагине <a href="http://blog.sjinks.pro/tag/wordpress/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  WordPress">WordPress</a> Z-Vote 1.1</em></h2>
<p>В плагине WordPress Z-Vote 1.1 была <a href="http://www.exploit-db.com/exploits/16218/">обнаружена</a> <a href="http://blog.sjinks.pro/tag/vulnerability/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  уязвимость">уязвимость</a>, позволяющая злоумышленнику выполнять произвольные запросы к базе данных (<a href="http://blog.sjinks.pro/tag/vulnerability/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  уязвимость">уязвимость</a> типа «<a href="http://blog.sjinks.pro/tag/sql-injection/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  SQL-инъекция">SQL-инъекция</a>»).</p>
<p>Уязвимость существует из-за неправильного использования метода <span class="codebox"><code class="php">wpdb<span class="sy0">::</span><span class="me2">prepare</span><span class="br0">&#40;</span><span class="br0">&#41;</span></code></span> и отсутствия проверки и очистки переменной <code>$_GET['zvote']</code>.</p>
<p>Уязвимость позволяет злоумышленнику изменять запросы к базе данных, выполнять произвольные запросы, читать или изменять конфиденциальную информацию.<span id="more-902"></span><br />
Вторая уязвимость (незначительная по сравнению с SQL-инъекцией) — раскрытие пути к плагину (<a href="http://blog.sjinks.pro/tag/path-disclosure/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  path disclosure">path disclosure</a>) при прямом доступе к файлу плагина.</p>
<p><strong><a href='http://static.sjinks.info/wp-content/uploads/2011/02/z-vote.diff'>Патч, исправляющий уязвимости в Z-Vote 1.1</a>:</strong></p>
          
<div class="codebox">
    <div class="the_code" style="" id="p90218">
        <div class="code diff" id="p902code18">
diff -uwdBrN z-vote.orig/zvote.php z-vote/zvote.php<br />
<span class="re3">--- z-vote.orig/zvote.php &nbsp; <span class="nu0">2011</span>-02-<span class="nu0">25</span> <span class="nu0">21</span>:05:<span class="nu0">44.000000000</span> +0200</span><br />
<span class="re4">+++ z-vote/zvote.php&nbsp; &nbsp; <span class="nu0">2011</span>-02-<span class="nu0">25</span> <span class="nu0">21</span>:<span class="nu0">10</span>:<span class="nu0">46.531798756</span> +0200</span><br />
<span class="re6">@@ -<span class="nu0">9</span>,<span class="nu0">6</span> +<span class="nu0">9</span>,<span class="nu0">8</span> @@</span><br />
&nbsp; &nbsp;License: GPL <br />
&nbsp;*/<br />
&nbsp;<br />
<span class="re8">+ &nbsp; defined<span class="br0">&#40;</span>'ABSPATH'<span class="br0">&#41;</span> or die<span class="br0">&#40;</span><span class="br0">&#41;</span>;</span><br />
<span class="re8">+</span><br />
&nbsp;// --- DEFINITIONS<br />
&nbsp;<br />
&nbsp; &nbsp; //define where zvote is installed on the wordpres system. In 99.9% of the case the path below is correct.<br />
<span class="re6">@@ -<span class="nu0">271</span>,<span class="nu0">7</span> +<span class="nu0">273</span>,<span class="nu0">7</span> @@</span><br />
&nbsp;function zVote_getEntry<span class="br0">&#40;</span>$postid<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; global $wpdb;<br />
&nbsp;<br />
<span class="re7">- &nbsp; $entries = $wpdb-&gt;get_results<span class="br0">&#40;</span>$wpdb-&gt;prepare<span class="br0">&#40;</span>&quot;SELECT * FROM &quot; . $wpdb-&gt;prefix . &quot;zvotedata WHERE postid = &quot; . $postid . &quot;&quot;<span class="br0">&#41;</span><span class="br0">&#41;</span>;</span><br />
<span class="re8">+ &nbsp; $entries = $wpdb-&gt;get_results<span class="br0">&#40;</span>$wpdb-&gt;prepare<span class="br0">&#40;</span>&quot;SELECT * FROM &quot; . $wpdb-&gt;prefix . &quot;zvotedata WHERE postid = %d&quot;, $postid<span class="br0">&#41;</span><span class="br0">&#41;</span>;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; return $entries;<br />
&nbsp;<span class="br0">&#125;</span><br />
<span class="re6">@@ -<span class="nu0">282</span>,<span class="nu0">7</span> +<span class="nu0">284</span>,<span class="nu0">7</span> @@</span><br />
&nbsp; &nbsp; global $wpdb;<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; $votes = <span class="nu0">0</span>;<br />
<span class="re7">- &nbsp; $votes = $wpdb-&gt;get_var<span class="br0">&#40;</span>$wpdb-&gt;prepare<span class="br0">&#40;</span>&quot;SELECT COUNT<span class="br0">&#40;</span>*<span class="br0">&#41;</span> FROM &quot; . $wpdb-&gt;prefix . &quot;zvotedata WHERE postid = &quot; . $postid . &quot;&quot;<span class="br0">&#41;</span><span class="br0">&#41;</span>;</span><br />
<span class="re8">+ &nbsp; $votes = $wpdb-&gt;get_var<span class="br0">&#40;</span>$wpdb-&gt;prepare<span class="br0">&#40;</span>&quot;SELECT COUNT<span class="br0">&#40;</span>*<span class="br0">&#41;</span> FROM &quot; . $wpdb-&gt;prefix . &quot;zvotedata WHERE postid = %d&quot;, $postid<span class="br0">&#41;</span><span class="br0">&#41;</span>;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; return $votes;<br />
&nbsp;<span class="br0">&#125;</span><br />
<span class="re6">@@ -<span class="nu0">292</span>,<span class="nu0">7</span> +<span class="nu0">294</span>,<span class="nu0">7</span> @@</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; global $wpdb;<br />
&nbsp; &nbsp; <br />
<span class="re7">- &nbsp; $votes = $wpdb-&gt;get_var<span class="br0">&#40;</span>$wpdb-&gt;prepare<span class="br0">&#40;</span>&quot;DELETE FROM &quot; . $wpdb-&gt;prefix . &quot;zvotedata WHERE postid = &quot; . $postid . &quot;&quot;<span class="br0">&#41;</span><span class="br0">&#41;</span>;</span><br />
<span class="re8">+ &nbsp; $votes = $wpdb-&gt;get_var<span class="br0">&#40;</span>$wpdb-&gt;prepare<span class="br0">&#40;</span>&quot;DELETE FROM &quot; . $wpdb-&gt;prefix . &quot;zvotedata WHERE postid = %d&quot;, $postid<span class="br0">&#41;</span><span class="br0">&#41;</span>;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; return $votes;<br />
&nbsp;<span class="br0">&#125;</span><br />
<span class="re6">@@ -<span class="nu0">353</span>,<span class="nu0">7</span> +<span class="nu0">355</span>,<span class="nu0">7</span> @@</span><br />
&nbsp; &nbsp; global $wpdb;<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; //ipcheck for now, will expand to userid-check, based on the user setting in version 1.5<br />
<span class="re7">- &nbsp; $ipcheck = $wpdb-&gt;get_var<span class="br0">&#40;</span>$wpdb-&gt;prepare<span class="br0">&#40;</span>&quot;SELECT id FROM &quot; . $wpdb-&gt;prefix . &quot;zvotedata WHERE postid = &quot; . $postid . &quot; AND userip = \&quot;&quot; . $_SERVER<span class="br0">&#91;</span>'REMOTE_ADDR'<span class="br0">&#93;</span> . &quot;\&quot;&quot;<span class="br0">&#41;</span><span class="br0">&#41;</span>;</span><br />
<span class="re8">+ &nbsp; $ipcheck = $wpdb-&gt;get_var<span class="br0">&#40;</span>$wpdb-&gt;prepare<span class="br0">&#40;</span>&quot;SELECT id FROM &quot; . $wpdb-&gt;prefix . &quot;zvotedata WHERE postid = %d AND userip = %s&quot;, $postid, $_SERVER<span class="br0">&#91;</span>'REMOTE_ADDR'<span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; $wpdb-&gt;insert<span class="br0">&#40;</span> $wpdb-&gt;prefix . 'zvotedata', array<span class="br0">&#40;</span> 'postid' =&gt; $postid, 'userip' =&gt; $_SERVER<span class="br0">&#91;</span>'REMOTE_ADDR'<span class="br0">&#93;</span>, 'userid' =&gt; 0, 'time' =&gt; time<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#41;</span>, array<span class="br0">&#40;</span> '%d','%s', '%d', '%d' <span class="br0">&#41;</span> <span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <br />
<span class="re6">@@ -<span class="nu0">365</span>,<span class="nu0">7</span> +<span class="nu0">367</span>,<span class="nu0">7</span> @@</span><br />
&nbsp; &nbsp; global $wpdb, $wp_query, $redirect_meta_key;<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; //ipcheck for now, will expand to userid-check, based on the user setting in version 1.5<br />
<span class="re7">- &nbsp; $ipcheck = $wpdb-&gt;get_var<span class="br0">&#40;</span>$wpdb-&gt;prepare<span class="br0">&#40;</span>&quot;SELECT id FROM &quot; . $wpdb-&gt;prefix . &quot;zvotedata WHERE postid = &quot; . $postid . &quot; AND userip = \&quot;&quot; . $_SERVER<span class="br0">&#91;</span>'REMOTE_ADDR'<span class="br0">&#93;</span> . &quot;\&quot;&quot;<span class="br0">&#41;</span><span class="br0">&#41;</span>;</span><br />
<span class="re8">+ &nbsp; $ipcheck = $wpdb-&gt;get_var<span class="br0">&#40;</span>$wpdb-&gt;prepare<span class="br0">&#40;</span>&quot;SELECT id FROM &quot; . $wpdb-&gt;prefix . &quot;zvotedata WHERE postid = %d AND userip = %d&quot;, $postid, $_SERVER<span class="br0">&#91;</span>'REMOTE_ADDR'<span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; if <span class="br0">&#40;</span>!$ipcheck<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; //ok to vote, register vote<br />
<span class="re6">@@ -<span class="nu0">382</span>,<span class="nu0">7</span> +<span class="nu0">384</span>,<span class="nu0">7</span> @@</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; //send user to post<br />
<span class="re7">- &nbsp; &nbsp; &nbsp; header<span class="br0">&#40;</span>'Location: ' .$injectionPoint<span class="br0">&#41;</span>;</span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; wp_redirect<span class="br0">&#40;</span>$injectionPoint<span class="br0">&#41;</span>;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; exit;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span> else <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; //user already registered, push to entry-page and inform the user.<br />
<span class="re6">@@ -<span class="nu0">394</span>,<span class="nu0">7</span> +<span class="nu0">396</span>,<span class="nu0">7</span> @@</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $injectionPoint = $post . '?zvoters=2';<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
<span class="re7">- &nbsp; &nbsp; &nbsp; header<span class="br0">&#40;</span>'Location: ' .$injectionPoint<span class="br0">&#41;</span>;</span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; wp_redirect<span class="br0">&#40;</span>$injectionPoint<span class="br0">&#41;</span>;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; exit;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; exit;
        </div>
    </div>
</div>

<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/security/902-sql-injection-vulnerability-z-vote/">источник</a> обязательно.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.sjinks.pro/security/902-sql-injection-vulnerability-z-vote/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Межсайтовый скриптинг в плагине Accept Signups 0.1</title>
		<link>http://blog.sjinks.pro/security/892-accept-signups-xss/</link>
		<comments>http://blog.sjinks.pro/security/892-accept-signups-xss/#comments</comments>
		<pubDate>Wed, 09 Feb 2011 04:10:34 +0000</pubDate>
		<dc:creator>Vladimir</dc:creator>
				<category><![CDATA[Безопасность]]></category>
		<category><![CDATA[Плагины WordPress]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[XSS]]></category>
		<category><![CDATA[безопасность]]></category>
		<category><![CDATA[патч]]></category>
		<category><![CDATA[плагин]]></category>
		<category><![CDATA[уязвимость]]></category>

		<guid isPermaLink="false">http://blog.sjinks.pro/?p=892</guid>
		<description><![CDATA[Исправление OSVDB-70101 для плагина Accept Signups В плагине Accept Signups 1.0 обнаружена уязвимость, позволяющая провести удалённому пользователю XSS-атаку. Уязвимость связана с отсутствием обработки входных данных в параметре email, передаваемом файлу wp-content/plugins/accept-signups/accept-signups_submit.php, а также с отсутствием экранирования специальных символов при выводе данных в wp-content/plugins/accept-signups/accept-signups.php. Уязвимость позволяет при помощи специально сформированного URL выполнить произвольный код сценария в браузере [...]<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/security/892-accept-signups-xss/">источник</a> обязательно.</p>]]></description>
			<content:encoded><![CDATA[<h2><em>Исправление OSVDB-70101 для плагина Accept Signups</em></h2>
<p>В плагине <a href="http://wordpress.org/extend/plugins/accept-signups/">Accept Signups</a> 1.0 <a href="http://osvdb.org/show/osvdb/70101">обнаружена</a> <a href="http://blog.sjinks.pro/tag/vulnerability/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  уязвимость">уязвимость</a>, позволяющая провести удалённому пользователю <a href="http://blog.sjinks.pro/tag/xss/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  XSS">XSS</a>-атаку.</p>
<p>Уязвимость связана с отсутствием обработки входных данных в параметре <code>email</code>, передаваемом файлу <code>wp-content/plugins/accept-signups/accept-signups_submit.php</code>, а также с отсутствием экранирования специальных символов при выводе данных в <code>wp-content/plugins/accept-signups/accept-signups.php</code>.</p>
<p>Уязвимость позволяет при помощи специально сформированного URL выполнить произвольный код сценария в браузере жертвы в контексте безопасности уязвимого сайта.<span id="more-892"></span></p>
<p><strong><a href='http://static.sjinks.info/wp-content/uploads/2011/02/accept-signups.diff'>Патч для плагина Accept Signups 0.1</a>:</strong></p>
          
<div class="codebox">
    <div class="the_code" style="" id="p89220">
        <div class="code diff" id="p892code20">
diff -uwdBrN accept-signups.orig/accept-signups.php accept-signups/accept-signups.php<br />
<span class="re3">--- accept-signups.orig/accept-signups.php&nbsp; <span class="nu0">2010</span>-<span class="nu0">12</span>-<span class="nu0">21</span> <span class="nu0">11</span>:07:<span class="nu0">21.000000000</span> +0200</span><br />
<span class="re4">+++ accept-signups/accept-signups.php &nbsp; <span class="nu0">2011</span>-02-09 06:06:<span class="nu0">33.612991546</span> +0200</span><br />
<span class="re6">@@ -<span class="nu0">223</span>,<span class="nu0">7</span> +<span class="nu0">223</span>,<span class="nu0">7</span> @@</span><br />
&nbsp; &nbsp; $r = $wpdb-&gt;get_results<span class="br0">&#40;</span>$sql, ARRAY_A<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; $xml = '&lt;accept-signups&gt;';<br />
&nbsp; &nbsp; foreach<span class="br0">&#40;</span>$r as $k=&gt;$v<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
<span class="re7">- &nbsp; &nbsp; &nbsp; $xml .= '&lt;signup email=&quot;' . $v<span class="br0">&#91;</span>&quot;email&quot;<span class="br0">&#93;</span> . '&quot; ip=&quot;' . $v<span class="br0">&#91;</span>&quot;ip&quot;<span class="br0">&#93;</span> . '&quot; timestamp=&quot;' . $v<span class="br0">&#91;</span>&quot;timestamp&quot;<span class="br0">&#93;</span> . '&quot; /&gt;';</span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; $xml .= '&lt;signup email=&quot;' . esc_attr<span class="br0">&#40;</span>$v<span class="br0">&#91;</span>&quot;email&quot;<span class="br0">&#93;</span><span class="br0">&#41;</span> . '&quot; ip=&quot;' . $v<span class="br0">&#91;</span>&quot;ip&quot;<span class="br0">&#93;</span> . '&quot; timestamp=&quot;' . $v<span class="br0">&#91;</span>&quot;timestamp&quot;<span class="br0">&#93;</span> . '&quot; /&gt;';</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; $xml .= '&lt;/accept-signups&gt;';<br />
&nbsp; &nbsp; file_put_contents<span class="br0">&#40;</span>ABSPATH . 'wp-content/plugins/accept-signups/accept-signups.xml', $xml<span class="br0">&#41;</span>;<br />
<span class="re6">@@ -<span class="nu0">290</span>,<span class="nu0">7</span> +<span class="nu0">290</span>,<span class="nu0">7</span> @@</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if <span class="br0">&#40;</span>strpos<span class="br0">&#40;</span>$v1, '@'<span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $email = $v1;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
<span class="re7">- &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $html .= '&lt;td valign=&quot;top&quot; align=&quot;center&quot; class=&quot;acceptSignupsCell&quot;&gt;&amp;nbsp;&amp;nbsp;' . $v1 . '&amp;nbsp;&amp;nbsp;&lt;/td&gt;'; </span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $html .= '&lt;td valign=&quot;top&quot; align=&quot;center&quot; class=&quot;acceptSignupsCell&quot;&gt;&amp;nbsp;&amp;nbsp;' . esc_html<span class="br0">&#40;</span>$v1<span class="br0">&#41;</span> . '&amp;nbsp;&amp;nbsp;&lt;/td&gt;'; </span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; $html .= '&lt;td valign=&quot;top&quot; align=&quot;center&quot; class=&quot;acceptSignupsCell&quot; valign=&quot;bottom&quot;&gt;&lt;input type=&quot;checkbox&quot; name=&quot;acceptSignupsDeleteCB?' . acceptSignupsEncode<span class="br0">&#40;</span>$email<span class="br0">&#41;</span> . '&quot; id=&quot;acceptSignupsDeleteCB&quot;&gt;&lt;/td&gt;'; <br />
&nbsp; &nbsp; &nbsp; &nbsp; $html .= '&lt;/tr&gt;';<br />
diff -uwdBrN accept-signups.orig/accept-signups_submit.php accept-signups/accept-signups_submit.php<br />
<span class="re3">--- accept-signups.orig/accept-signups_submit.php &nbsp; <span class="nu0">2010</span>-<span class="nu0">12</span>-<span class="nu0">21</span> <span class="nu0">11</span>:07:<span class="nu0">21.000000000</span> +0200</span><br />
<span class="re4">+++ accept-signups/accept-signups_submit.php&nbsp; &nbsp; <span class="nu0">2011</span>-02-09 06:03:<span class="nu0">04.017742924</span> +0200</span><br />
<span class="re6">@@ -<span class="nu0">1</span>,<span class="nu0">6</span> +<span class="nu0">1</span>,<span class="nu0">5</span> @@</span><br />
&nbsp;&lt;?php<br />
<span class="re7">-require_once<span class="br0">&#40;</span>'../../../wp-config.php'<span class="br0">&#41;</span>;</span><br />
<span class="re7">-require_once<span class="br0">&#40;</span>'../../../wp-includes/wp-db.php'<span class="br0">&#41;</span>;</span><br />
<span class="re8">+require_once<span class="br0">&#40;</span>'../../../wp-load.php'<span class="br0">&#41;</span>;</span><br />
&nbsp;<br />
&nbsp;if <span class="br0">&#40;</span>true<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; if <span class="br0">&#40;</span>isset<span class="br0">&#40;</span>$_GET<span class="br0">&#91;</span>'email'<span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
<span class="re6">@@ -<span class="nu0">9</span>,<span class="nu0">6</span> +<span class="nu0">8</span>,<span class="nu0">16</span> @@</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if <span class="br0">&#40;</span>hasEmail<span class="br0">&#40;</span>$_GET<span class="br0">&#91;</span>'email'<span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; echo get_option<span class="br0">&#40;</span>'accept-signups-email-already-exists'<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> else <span class="br0">&#123;</span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $email = stripslashes<span class="br0">&#40;</span>$_GET<span class="br0">&#91;</span>'email'<span class="br0">&#93;</span><span class="br0">&#41;</span>;</span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if <span class="br0">&#40;</span>function_exists<span class="br0">&#40;</span>'filter_var'<span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if <span class="br0">&#40;</span>!filter_var<span class="br0">&#40;</span>$email, FILTER_VALIDATE_EMAIL<span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; die<span class="br0">&#40;</span>'-1'<span class="br0">&#41;</span>;</span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; elseif <span class="br0">&#40;</span>!preg_match<span class="br0">&#40;</span>'/^<span class="br0">&#40;</span><span class="br0">&#91;</span>a-z0-<span class="nu0">9</span>_\-\.<span class="br0">&#93;</span><span class="br0">&#41;</span>+\@<span class="br0">&#40;</span><span class="br0">&#91;</span>a-z0-<span class="nu0">9</span>_\-\.<span class="br0">&#93;</span><span class="br0">&#41;</span>+\.<span class="br0">&#40;</span><span class="br0">&#91;</span>a-z<span class="br0">&#93;</span><span class="br0">&#123;</span><span class="nu0">2</span>,<span class="nu0">4</span><span class="br0">&#125;</span><span class="br0">&#41;</span>$/i', $email<span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; die<span class="br0">&#40;</span>'-1'<span class="br0">&#41;</span>;</span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></span><br />
<span class="re8">+</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; saveEmail<span class="br0">&#40;</span>$_GET<span class="br0">&#91;</span>'email'<span class="br0">&#93;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; echo get_option<span class="br0">&#40;</span>'accept-signups-email-saved'<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
        </div>
    </div>
</div>

<p>Помимо OSVDB-70101, данный <a href="http://blog.sjinks.pro/tag/patch/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  патч">патч</a> исправляет еще пару мелких недочётов.</p>
<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/security/892-accept-signups-xss/">источник</a> обязательно.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.sjinks.pro/security/892-accept-signups-xss/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Межсайтовый скриптинг в WordPress BezahlCode-Generator 1.0</title>
		<link>http://blog.sjinks.pro/security/890-bezahlcode-generator-xss/</link>
		<comments>http://blog.sjinks.pro/security/890-bezahlcode-generator-xss/#comments</comments>
		<pubDate>Wed, 09 Feb 2011 03:13:15 +0000</pubDate>
		<dc:creator>Vladimir</dc:creator>
				<category><![CDATA[Безопасность]]></category>
		<category><![CDATA[Плагины WordPress]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[XSS]]></category>
		<category><![CDATA[безопасность]]></category>
		<category><![CDATA[патч]]></category>
		<category><![CDATA[плагин]]></category>
		<category><![CDATA[уязвимость]]></category>

		<guid isPermaLink="false">http://blog.sjinks.pro/?p=890</guid>
		<description><![CDATA[Патч для BezahlCode-Generator, исправляющий уязвимость В плагине BezahlCode-Generator 1.0 обнаружена уязвимость, позволяющая провести удалённому пользователю XSS-атаку. Уязвимость связана с отсутствием обработки входных данных в параметрах gen_name, gen_account, gen_BNC, gen_amount, gen_reason в bezahlcode-generator/der_generator.php. Удаленный пользователь может с помощью специально сформированного запроса выполнить произвольный код сценария в браузере жертвы в контексте безопасности уязвимого сайта. Патч для BezahlCode-Generator 1.0: [...]<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/security/890-bezahlcode-generator-xss/">источник</a> обязательно.</p>]]></description>
			<content:encoded><![CDATA[<h2><em>Патч для BezahlCode-Generator, исправляющий <a href="http://blog.sjinks.pro/tag/vulnerability/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  уязвимость">уязвимость</a></em></h2>
<p>В плагине <a href="http://wordpress.org/extend/plugins/bezahlcode-generator/">BezahlCode-Generator</a> 1.0 обнаружена уязвимость, позволяющая провести удалённому пользователю <a href="http://blog.sjinks.pro/tag/xss/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  XSS">XSS</a>-атаку. Уязвимость связана с отсутствием обработки входных данных в параметрах <code>gen_name</code>, <code>gen_account</code>, <code>gen_BNC</code>, <code>gen_amount</code>, <code>gen_reason</code> в <code>bezahlcode-generator/der_generator.php</code>.</p>
<p>Удаленный пользователь может с помощью специально сформированного запроса выполнить произвольный код сценария в браузере жертвы в контексте безопасности уязвимого сайта.<span id="more-890"></span></p>
<p><a href='http://static.sjinks.info/wp-content/uploads/2011/02/der_generator.php_.diff'>Патч для BezahlCode-Generator 1.0</a>:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p89022">
        <div class="code diff" id="p890code22">
--- der_generator.orig.php&nbsp; 2011-02-09 04:52:27.000000000 +0200<br />
<span class="re4">+++ der_generator.php &nbsp; <span class="nu0">2011</span>-02-09 05:00:<span class="nu0">20.457537559</span> +0200</span><br />
<span class="re6">@@ -<span class="nu0">16</span>,<span class="nu0">15</span> +<span class="nu0">16</span>,<span class="nu0">15</span> @@</span><br />
&nbsp;&lt;label for=&quot;singlepaymentspende&quot;&gt;&lt;input type=&quot;radio&quot; id=&quot;singlepaymentspende&quot; name=&quot;gen_type&quot; value=&quot;singlepaymentspende&quot; &lt;?php if<span class="br0">&#40;</span>$_REQUEST<span class="br0">&#91;</span>'gen_type'<span class="br0">&#93;</span>==&quot;singlepaymentspende&quot;<span class="br0">&#41;</span> echo 'checked=&quot;checked&quot;'?&gt;/&gt; Spendenzahlung&lt;/label&gt;&lt;br /&gt;<br />
&nbsp;&lt;label for=&quot;singledirectdebit&quot;&gt;&lt;input type=&quot;radio&quot; id=&quot;singledirectdebit&quot; name=&quot;gen_type&quot; value=&quot;singledirectdebit&quot; &lt;?php if<span class="br0">&#40;</span>$_REQUEST<span class="br0">&#91;</span>'gen_type'<span class="br0">&#93;</span>==&quot;singledirectdebit&quot;<span class="br0">&#41;</span> echo 'checked=&quot;checked&quot;'?&gt;/&gt; Lastschrift&lt;/label&gt;&lt;br /&gt;<br />
&nbsp;<br />
<span class="re7">-Name:&lt;br /&gt;&lt;input type=&quot;text&quot; tooltipText=&quot;Format: DTAUS Text&quot; id=&quot;gen_name&quot; onblur=&quot;checkInput<span class="br0">&#40;</span>this, 'dtaus'<span class="br0">&#41;</span>&quot; name=&quot;gen_name&quot; maxlength=&quot;<span class="nu0">27</span>&quot; value=&quot;&lt;?= isset<span class="br0">&#40;</span>$_REQUEST<span class="br0">&#91;</span>'gen_name'<span class="br0">&#93;</span><span class="br0">&#41;</span>?$_REQUEST<span class="br0">&#91;</span>'gen_name'<span class="br0">&#93;</span>:&quot;&quot;?&gt;&quot;&gt;</span><br />
<span class="re8">+Name:&lt;br /&gt;&lt;input type=&quot;text&quot; tooltipText=&quot;Format: DTAUS Text&quot; id=&quot;gen_name&quot; onblur=&quot;checkInput<span class="br0">&#40;</span>this, 'dtaus'<span class="br0">&#41;</span>&quot; name=&quot;gen_name&quot; maxlength=&quot;<span class="nu0">27</span>&quot; value=&quot;&lt;?= isset<span class="br0">&#40;</span>$_REQUEST<span class="br0">&#91;</span>'gen_name'<span class="br0">&#93;</span><span class="br0">&#41;</span>?esc_attr<span class="br0">&#40;</span>$_REQUEST<span class="br0">&#91;</span>'gen_name'<span class="br0">&#93;</span><span class="br0">&#41;</span>:&quot;&quot;?&gt;&quot;&gt;</span><br />
&nbsp;&lt;br /&gt;<br />
<span class="re7">-Kontonummer:&lt;br /&gt;&lt;input type=&quot;text&quot; tooltipText=&quot;Format: Ganzzahl z.B. <span class="nu0">1234</span>&quot; id=&quot;gen_account&quot; onblur=&quot;checkInput<span class="br0">&#40;</span>this, 'ganzzahl'<span class="br0">&#41;</span>&quot; name=&quot;gen_account&quot; value=&quot;&lt;?= isset<span class="br0">&#40;</span>$_REQUEST<span class="br0">&#91;</span>'gen_account'<span class="br0">&#93;</span><span class="br0">&#41;</span>?$_REQUEST<span class="br0">&#91;</span>'gen_account'<span class="br0">&#93;</span>:&quot;&quot;?&gt;&quot; &gt;</span><br />
<span class="re8">+Kontonummer:&lt;br /&gt;&lt;input type=&quot;text&quot; tooltipText=&quot;Format: Ganzzahl z.B. <span class="nu0">1234</span>&quot; id=&quot;gen_account&quot; onblur=&quot;checkInput<span class="br0">&#40;</span>this, 'ganzzahl'<span class="br0">&#41;</span>&quot; name=&quot;gen_account&quot; value=&quot;&lt;?= isset<span class="br0">&#40;</span>$_REQUEST<span class="br0">&#91;</span>'gen_account'<span class="br0">&#93;</span><span class="br0">&#41;</span>?esc_attr<span class="br0">&#40;</span>$_REQUEST<span class="br0">&#91;</span>'gen_account'<span class="br0">&#93;</span><span class="br0">&#41;</span>:&quot;&quot;?&gt;&quot; &gt;</span><br />
&nbsp;&lt;br /&gt;<br />
<span class="re7">-BLZ:&lt;br /&gt;&lt;input type=&quot;text&quot; tooltipText=&quot;Format: Ganzzahl z.B. <span class="nu0">1234</span>&quot; id=&quot;gen_BNC&quot; onblur=&quot;checkInput<span class="br0">&#40;</span>this, 'ganzzahl'<span class="br0">&#41;</span>&quot; name=&quot;gen_BNC&quot; value=&quot;&lt;?= isset<span class="br0">&#40;</span>$_REQUEST<span class="br0">&#91;</span>'gen_BNC'<span class="br0">&#93;</span><span class="br0">&#41;</span>?$_REQUEST<span class="br0">&#91;</span>'gen_BNC'<span class="br0">&#93;</span>:&quot;&quot;?&gt;&quot; &gt;</span><br />
<span class="re8">+BLZ:&lt;br /&gt;&lt;input type=&quot;text&quot; tooltipText=&quot;Format: Ganzzahl z.B. <span class="nu0">1234</span>&quot; id=&quot;gen_BNC&quot; onblur=&quot;checkInput<span class="br0">&#40;</span>this, 'ganzzahl'<span class="br0">&#41;</span>&quot; name=&quot;gen_BNC&quot; value=&quot;&lt;?= isset<span class="br0">&#40;</span>$_REQUEST<span class="br0">&#91;</span>'gen_BNC'<span class="br0">&#93;</span><span class="br0">&#41;</span>?esc_attr<span class="br0">&#40;</span>$_REQUEST<span class="br0">&#91;</span>'gen_BNC'<span class="br0">&#93;</span><span class="br0">&#41;</span>:&quot;&quot;?&gt;&quot; &gt;</span><br />
&nbsp;&lt;br /&gt;<br />
<span class="re7">-Betrag in Euro <span class="br0">&#40;</span>z.B. <span class="nu0">1234</span>,<span class="nu0">50</span><span class="br0">&#41;</span> &lt;br /&gt;&lt;input type=&quot;text&quot; tooltipText=&quot;Format: Dezimalzahl z.B. <span class="nu0">1234</span>,<span class="nu0">50</span>&quot; onblur=&quot;checkInput<span class="br0">&#40;</span>this, 'dezimalzahl'<span class="br0">&#41;</span>&quot; id=&quot;gen_amount&quot; name=&quot;gen_amount&quot; value=&quot;&lt;?= isset<span class="br0">&#40;</span>$_REQUEST<span class="br0">&#91;</span>'gen_amount'<span class="br0">&#93;</span><span class="br0">&#41;</span>?$_REQUEST<span class="br0">&#91;</span>'gen_amount'<span class="br0">&#93;</span>:&quot;&quot;?&gt;&quot; &gt;</span><br />
<span class="re8">+Betrag in Euro <span class="br0">&#40;</span>z.B. <span class="nu0">1234</span>,<span class="nu0">50</span><span class="br0">&#41;</span> &lt;br /&gt;&lt;input type=&quot;text&quot; tooltipText=&quot;Format: Dezimalzahl z.B. <span class="nu0">1234</span>,<span class="nu0">50</span>&quot; onblur=&quot;checkInput<span class="br0">&#40;</span>this, 'dezimalzahl'<span class="br0">&#41;</span>&quot; id=&quot;gen_amount&quot; name=&quot;gen_amount&quot; value=&quot;&lt;?= isset<span class="br0">&#40;</span>$_REQUEST<span class="br0">&#91;</span>'gen_amount'<span class="br0">&#93;</span><span class="br0">&#41;</span>?esc_attr<span class="br0">&#40;</span>$_REQUEST<span class="br0">&#91;</span>'gen_amount'<span class="br0">&#93;</span><span class="br0">&#41;</span>:&quot;&quot;?&gt;&quot; &gt;</span><br />
&nbsp;&lt;br /&gt;<br />
<span class="re7">-Verwendungszweck:&lt;br /&gt;&lt;input type=&quot;text&quot; id=&quot;gen_reason&quot; tooltipText=&quot;Format: DTAUS Text&quot; onblur=&quot;checkInput<span class="br0">&#40;</span>this, 'dtaus'<span class="br0">&#41;</span>&quot; name=&quot;gen_reason&quot; maxlength=&quot;<span class="nu0">54</span>&quot; value=&quot;&lt;?= isset<span class="br0">&#40;</span>$_REQUEST<span class="br0">&#91;</span>'gen_reason'<span class="br0">&#93;</span><span class="br0">&#41;</span>?$_REQUEST<span class="br0">&#91;</span>'gen_reason'<span class="br0">&#93;</span>:&quot;&quot;?&gt;&quot; &gt;</span><br />
<span class="re8">+Verwendungszweck:&lt;br /&gt;&lt;input type=&quot;text&quot; id=&quot;gen_reason&quot; tooltipText=&quot;Format: DTAUS Text&quot; onblur=&quot;checkInput<span class="br0">&#40;</span>this, 'dtaus'<span class="br0">&#41;</span>&quot; name=&quot;gen_reason&quot; maxlength=&quot;<span class="nu0">54</span>&quot; value=&quot;&lt;?= isset<span class="br0">&#40;</span>$_REQUEST<span class="br0">&#91;</span>'gen_reason'<span class="br0">&#93;</span><span class="br0">&#41;</span>?esc_attr<span class="br0">&#40;</span>$_REQUEST<span class="br0">&#91;</span>'gen_reason'<span class="br0">&#93;</span><span class="br0">&#41;</span>:&quot;&quot;?&gt;&quot; &gt;</span><br />
&nbsp;&lt;br/&gt;<br />
&nbsp;&lt;input type=&quot;button&quot; value=&quot;Erstellen&quot; onclick='javascript:generateImage<span class="br0">&#40;</span><span class="br0">&#41;</span>;'&gt;<br />
&nbsp;&lt;/form&gt;
        </div>
    </div>
</div>

<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/security/890-bezahlcode-generator-xss/">источник</a> обязательно.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.sjinks.pro/security/890-bezahlcode-generator-xss/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Заголовки HTTP для обеспечения безопасности сайта</title>
		<link>http://blog.sjinks.pro/security/884-http-headers-to-secure-website/</link>
		<comments>http://blog.sjinks.pro/security/884-http-headers-to-secure-website/#comments</comments>
		<pubDate>Mon, 03 Jan 2011 12:28:06 +0000</pubDate>
		<dc:creator>Wandering Soul</dc:creator>
				<category><![CDATA[Безопасность]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[XSS]]></category>
		<category><![CDATA[атака]]></category>
		<category><![CDATA[безопасность]]></category>

		<guid isPermaLink="false">http://blog.sjinks.pro/?p=884</guid>
		<description><![CDATA[Активация средств защиты, встроенных в современные бразуеры, для обеспечения дополнительной безопасности пользователей Безопасность сайта — это бесконечная битва между веб-мастерами и хакерами. В &#60;/xssed&#62; зарегистрировано около 40,000 сайтов, подверженных атакам XSS. XSS-атаки позволяют злоумышленникам красть cookie, личную информацию, взламывать аккаунты и многие другие вещи. Существует множество способов для защиты сайта, но ни один из них не может гарантировать [...]<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/security/884-http-headers-to-secure-website/">источник</a> обязательно.</p>]]></description>
			<content:encoded><![CDATA[<h2><em>Активация средств защиты, встроенных в современные бразуеры, для обеспечения дополнительной безопасности пользователей</em></h2>
<p><a href="http://blog.sjinks.pro/tag/tag-security/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  безопасность">Безопасность</a> сайта — это бесконечная битва между веб-мастерами и хакерами. В <a href="http://xssed.com/">&lt;/xssed&gt;</a> зарегистрировано около 40,000 сайтов, подверженных атакам <a href="http://blog.sjinks.pro/tag/xss/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  XSS">XSS</a>. <a href="http://blog.sjinks.pro/tag/xss/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  XSS">XSS</a>-атаки позволяют злоумышленникам красть cookie, личную информацию, взламывать аккаунты и многие другие вещи.</p>
<p>Существует множество способов для защиты сайта, но ни один из них не может гарантировать абсолютную безопасность. Как следствие, нужно использовать многоуровневую эшелонную зашиту для обеспечения безопасности сайта.</p>
<p>В данной статье будет показан один из вариантов защиты — основанный на использовании заголовков HTTP.<span id="more-884"></span></p>
<p>Современные браузеры сами предоставляют довольно мощную защиту для своих пользователей… Единственное «но» — сайт должен попросить браузер включить эту защиту. К счастью, это довольно просто.</p>
<p>Для <a href="http://blog.sjinks.pro/tag/apache/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  Apache">Apache</a>:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p88426">
        <div class="code apache" id="p884code26">
<span class="co1"># Запретить всем сайтам загружать страницу через &lt;frame&gt;/&lt;iframe&gt;</span><br />
<span class="kw1">Header</span> set X-Frame-<span class="kw1">Options</span> <span class="kw1">DENY</span><br />
<br />
<span class="co1"># Разрешить выполнение JavaScript, загруженного только с нашего домена.</span><br />
<span class="co1"># Не выполнять встроенный (inline) JavaScript</span><br />
<span class="kw1">Header</span> set X-Content-Security-Policy <span class="st0">&quot;allow 'self';&quot;</span><br />
<br />
<span class="co1"># Включение предотвращения XSS-атак в IE 8</span><br />
<span class="kw1">Header</span> set X-XSS-Protection <span class="st0">&quot;1; mode=block&quot;</span>
        </div>
    </div>
</div>

<p>Для <a href="http://blog.sjinks.pro/tag/nginx/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  nginx">nginx</a>:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p88427">
        <div class="code nginx" id="p884code27">
<span class="kw1">add_header</span> X-Frame-Options DENY;<br />
<span class="kw1">add_header</span> X-Content-Security-Policy <span class="st0">&quot;allow 'self';&quot;</span>;<br />
<span class="kw1">add_header</span> X-XSS-Protection <span class="st0">&quot;1; mode=block&quot;</span>;
        </div>
    </div>
</div>

<p><strong>X-Frame-Options</strong></p>
<p>Данный заголовок указывает браузеру, можно ли загружать страницы сайта через <span class="codebox"><code class="html"><span class="sc2">&lt;<span class="kw2">frame</span>&gt;</span></code></span>/<span class="codebox"><code class="html"><span class="sc2">&lt;<span class="kw2">iframe</span>&gt;</span></code></span>.</p>
<p>Значение <code>DENY</code> запретит загрузку через фреймы, значение <code>SAMEORIGIN</code> разрешит загрузку через фреймы, но только если и фрейм, и страница, его загружающая, находятся на одном домене (<a href="http://en.wikipedia.org/wiki/Same_origin_policy">Same Origin Policy</a>).</p>
<p>основная функция данной защиты — предотвращение <a href="http://ru.wikipedia.org/wiki/%D0%9A%D0%BB%D0%B8%D0%BA%D0%B4%D0%B6%D0%B5%D0%BA%D0%B8%D0%BD%D0%B3">кликджекинга</a>; в качестве дополнительного бонуса это позволит предотвратить атаку, описанную <a href="http://spareclockcycles.org/2010/12/19/d0z-me-the-evil-url-shortener/">Ben Schmidt</a>.</p>
<p>Заголовок воспринимается Internet Explorer 8.0+, Firefox 3.6.9+ (Gecko 1.9.2.9+), Opera 10.50+, Safari 4.0+, Chrome 4.1.249.1042+.</p>
<p>Подробное описание приведено <a href="https://developer.mozilla.org/en/the_x-frame-options_response_header">здесь</a>.</p>
<p><strong>X-Content-Security-Policy</strong></p>
<p>Данный заголовок указывает, как контент на сайте взаимодействует с самим сайтом. При помощи данного заголовка можно указывать, откуда можно загружать картинки, <a href="http://blog.sjinks.pro/tag/javascript/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  JavaScript">JavaScript</a>, фреймы, шрифты, объекты, таблицы стилей, медиаконтент и многое другое.</p>
<p>Приведённый в примере выше заголовок разрешает загрузку контента только с того же домена, на котором располагается загружаемая страница. При этом браузеру запрещается выполнение встроенного JavaScript (скрипты внутри блоков <span class="codebox"><code class="html"><span class="sc2">&lt;<span class="kw2">script</span>&gt;</span>…<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">script</span>&gt;</span></code></span>, обработчики событий и т.п.), создание кода из строк (например, через функцию eval(), а также передача строк в функции <code>setTimeout()</code>, <code>setInterval()</code> и т.п.), использование протокола <code>data:</code>.</p>
<p>Данный заголовок можно использовать на HTTPS-страницах для запрета загрузки небезопасного контента:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p88428">
        <div class="code text" id="p884code28">
X-Content-Security-Policy: allow https://*:443
        </div>
    </div>
</div>

<p>Подробнее о заголовке и поддерживаемых параметрах можно прочитать <a href="https://wiki.mozilla.org/Security/CSP/Specification">здесь</a>.</p>
<p><strong>X-XSS-Protection</strong></p>
<p>Данный заголовок работает исключительно в Internet Explorer: он включает встроенную в браузер защиту от XSS-атак (по умолчанию она отключена, так как может некорректно работать с некоторыми сайтами). Подробная информация о принципах работы защиты от XSS-атак в IE приведена в <a href="http://blogs.msdn.com/b/ie/archive/2008/07/01/ie8-security-part-iv-the-xss-filter.aspx">The Windows Internet Explorer Weblog</a>.</p>
<p>В заключение стоит отметить, что хоть данный способ и хорош, он должен использоваться вкупе с другими средствами защиты и быть частью комплексной системы безопасности. Безопасность лишней не бывает!</p>
<p><a href="http://community.developer.authorize.net/t5/The-Authorize-Net-Developer-Blog/HTTP-Headers-to-Help-Secure-Your-Website/ba-p/8604">Оригинал статьи</a>.</p>
<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/security/884-http-headers-to-secure-website/">источник</a> обязательно.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.sjinks.pro/security/884-http-headers-to-secure-website/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Не удивительно, что DreamHost ломают</title>
		<link>http://blog.sjinks.pro/security/875-no-wonder-dreamhost-gets-hacked/</link>
		<comments>http://blog.sjinks.pro/security/875-no-wonder-dreamhost-gets-hacked/#comments</comments>
		<pubDate>Tue, 07 Dec 2010 04:01:14 +0000</pubDate>
		<dc:creator>Vladimir</dc:creator>
				<category><![CDATA[Безопасность]]></category>
		<category><![CDATA[DreamHost]]></category>
		<category><![CDATA[безопасность]]></category>
		<category><![CDATA[взлом]]></category>

		<guid isPermaLink="false">http://blog.sjinks.pro/?p=875</guid>
		<description><![CDATA[Security by Obscurity себя не всегда оправдывает Сегодня мне довелось поработать на одном из серверов DreamHost. На сервер был shell, что приятно облегчило работу. В свете последних событий с массовым взломом серверов было интересно посмотреть, как у них обстоят дела с безопасностью. Далее по тексту все имена/названия/группы изменены! Задача поставлена простая: установить, можно ли залезть [...]<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/security/875-no-wonder-dreamhost-gets-hacked/">источник</a> обязательно.</p>]]></description>
			<content:encoded><![CDATA[<h2><em>Security by Obscurity себя не всегда оправдывает</em></h2>
<p>Сегодня мне довелось поработать на одном из серверов <a href="http://blog.sjinks.pro/tag/dreamhost/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  DreamHost">DreamHost</a>. На сервер был shell, что приятно облегчило работу. В свете последних событий с массовым взломом серверов было интересно посмотреть, как у них обстоят дела с безопасностью.<span id="more-875"></span></p>
<p><strong>Далее по тексту все имена/названия/группы изменены!</strong></p>
<p>Задача поставлена простая: установить, можно ли залезть в домашний каталог другого пользователя.</p>
<p>Начинаем с простого:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p87535">
        <div class="code bash" id="p875code35">
<span class="br0">&#91;</span>server<span class="br0">&#93;</span>$ <span class="kw2">ls</span> <span class="re5">-la</span> <span class="sy0">/</span>home<br />
<span class="kw2">ls</span>: cannot open directory <span class="sy0">/</span>home: Permission denied<br />
<span class="br0">&#91;</span>server<span class="br0">&#93;</span>$ <span class="kw2">whoami</span><br />
user1<br />
<span class="br0">&#91;</span>server<span class="br0">&#93;</span>$ <span class="kw2">groups</span> user1<br />
g5628<br />
<span class="br0">&#91;</span>server<span class="br0">&#93;</span>$ <span class="kw2">ls</span> <span class="re5">-lhad</span> ~<br />
drwxr-x--x <span class="nu0">8</span> user1 g5628 4.0K <span class="nu0">2010</span>-<span class="nu0">12</span>-06 <span class="nu0">18</span>:00 <span class="sy0">/</span>home<span class="sy0">/</span>user1
        </div>
    </div>
</div>

<p>Что мы видим:</p>
<ul>
<li>домашние каталоги других пользователей хостинга скрыты (на каталоге /home установлены права 0711);</li>
<li>домашние каталоги открыты на чтение другим пользователям, входящим в ту же группу.</li>
</ul>
<p>Что нам нужно:</p>
<ol>
<li>Получить список пользователей хостинга.</li>
<li>Проверить, кто из них входит в одну с нами группу.</li>
<li>Проверить, есть ли пользователи с небезопасными правами на домашнем каталоге.</li>
</ol>
<p>Первое решается довольно просто: <span class="codebox"><code class="bash"><span class="kw2">cat</span> <span class="sy0">/</span>etc<span class="sy0">/</span><span class="kw2">passwd</span></code></span></p>
<p>Второе тоже элементарно:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p87536">
        <div class="code bash" id="p875code36">
<span class="kw2">awk</span> <span class="st0">&quot;FS=<span class="es1">\&quot;</span>:<span class="es1">\&quot;</span> { if ( <span class="es1">\$</span>4 == <span class="es5">`id -g`</span>) { print <span class="es1">\$</span>1, <span class="es1">\$</span>6 } }&quot;</span> <span class="sy0">/</span>etc<span class="sy0">/</span><span class="kw2">passwd</span>
        </div>
    </div>
</div>

<p>Со вторым не особо повезло — пользователю user1 не довелось  попасть в другие группы, хотя там есть группы, в которые входит много пользователей:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p87537">
        <div class="code bash" id="p875code37">
<span class="br0">&#91;</span>server<span class="br0">&#93;</span>$ <span class="kw2">awk</span> <span class="st_h">'FS=&quot;:&quot; {print $4}'</span> <span class="sy0">/</span>etc<span class="sy0">/</span><span class="kw2">passwd</span> <span class="sy0">|</span> <span class="kw2">sort</span> <span class="sy0">|</span> <span class="kw2">uniq</span> <span class="re5">-c</span> <span class="sy0">|</span> <span class="kw2">sort</span> <span class="re5">-n</span> <span class="re5">-r</span> <span class="sy0">|</span> <span class="kw2">head</span><br />
&nbsp; &nbsp; &nbsp;<span class="nu0">84</span> <span class="nu0">626950</span><br />
&nbsp; &nbsp; &nbsp;<span class="nu0">73</span> <span class="nu0">627297</span><br />
&nbsp; &nbsp; &nbsp;<span class="nu0">66</span> <span class="nu0">20591</span><br />
&nbsp; &nbsp; &nbsp;<span class="nu0">24</span> <span class="nu0">627651</span><br />
&nbsp; &nbsp; &nbsp;<span class="nu0">24</span> <span class="nu0">20432</span><br />
&nbsp; &nbsp; &nbsp;<span class="nu0">22</span> <span class="nu0">79268</span><br />
&nbsp; &nbsp; &nbsp;<span class="nu0">20</span> <span class="nu0">211919</span><br />
&nbsp; &nbsp; &nbsp;<span class="nu0">19</span> <span class="nu0">221497</span><br />
&nbsp; &nbsp; &nbsp;<span class="nu0">16</span> <span class="nu0">626722</span><br />
&nbsp; &nbsp; &nbsp;<span class="nu0">13</span> <span class="nu0">627359</span>
        </div>
    </div>
</div>

<p>Переходим к третьему пункту:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p87538">
        <div class="code bash" id="p875code38">
<span class="br0">&#91;</span>server<span class="br0">&#93;</span>$ <span class="kw2">cat</span> <span class="sy0">/</span>etc<span class="sy0">/</span><span class="kw2">passwd</span> <span class="sy0">|</span> <span class="kw2">awk</span> <span class="st_h">'FS=&quot;:&quot; { print $6 }'</span> <span class="sy0">|</span> <span class="kw2">xargs</span> <span class="kw2">ls</span> <span class="re5">-lhad</span> <span class="sy0">|</span> <span class="kw2">grep</span> <span class="st_h">'r-x '</span> <span class="sy0">|</span> <span class="kw2">wc</span> <span class="re5">-l</span><br />
<span class="nu0">365</span>
        </div>
    </div>
</div>

<p>Таким образом, взломав один аккаунт, мы можем попробовать скомпрометировать еще 365 — если в каталоге пользователя есть файл/каталог, доступный всем на запись, аккаунт может быть скомпрометирован. Ну разве они не лапочки после этого?</p>
<p>Но это еще не всё: эти 365 пользователей могут входить в совершенно разные группы, что открывает нам путь к другим аккаунтам:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p87539">
        <div class="code bash" id="p875code39">
<span class="kw1">for</span> i <span class="kw1">in</span> <span class="sy0">`</span><span class="kw2">cat</span> <span class="sy0">/</span>etc<span class="sy0">/</span><span class="kw2">passwd</span> <span class="sy0">|</span> <span class="kw2">awk</span> <span class="st_h">'FS=&quot;:&quot; { print $6 }'</span> <span class="sy0">|</span> <span class="kw2">xargs</span> <span class="kw2">ls</span> <span class="re5">-lhad</span> <span class="sy0">|</span><span class="kw2">awk</span> <span class="st_h">'/r-x / { print $3 }'</span> <span class="sy0">|</span> <span class="kw2">sort</span> <span class="sy0">|</span> <span class="kw2">uniq</span> <span class="sy0">|</span> <span class="kw2">xargs</span><span class="sy0">`</span>; <span class="kw1">do</span> <span class="kw2">id</span> <span class="re5">-G</span> <span class="re1">$i</span> <span class="sy0">|</span> <span class="kw2">sed</span> <span class="st_h">'s/ /\n/g'</span>; <span class="kw1">done</span> <span class="sy0">|</span> <span class="kw2">sort</span> <span class="sy0">|</span> <span class="kw2">uniq</span> <span class="sy0">|</span> <span class="kw2">wc</span> <span class="re5">-l</span>
        </div>
    </div>
</div>

<p>Оказалось, что пользователи (уникальных имён оказалось 354) входят в 174 группы.</p>
<p>А дальше дело техники:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p87540">
        <div class="code bash" id="p875code40">
<span class="re2">G</span>=<span class="sy0">`</span><span class="kw1">for</span> i <span class="kw1">in</span> <span class="sy0">`</span><span class="kw2">cat</span> <span class="sy0">/</span>etc<span class="sy0">/</span><span class="kw2">passwd</span> <span class="sy0">|</span> <span class="kw2">awk</span> <span class="st_h">'FS=&quot;:&quot; { print $6 }'</span> <span class="sy0">|</span> <span class="kw2">xargs</span> <span class="kw2">ls</span> <span class="re5">-lhad</span> <span class="sy0">|</span><span class="kw2">awk</span> <span class="st_h">'/r-x / { print $3 }'</span> <span class="sy0">|</span> <span class="kw2">sort</span> <span class="sy0">|</span> <span class="kw2">uniq</span> <span class="sy0">|</span> <span class="kw2">xargs</span><span class="sy0">`</span>; <span class="kw1">do</span> <span class="kw2">id</span> <span class="re5">-G</span> <span class="re1">$i</span> <span class="sy0">|</span> <span class="kw2">sed</span> <span class="st_h">'s/ /\n/g'</span>; <span class="kw1">done</span> <span class="sy0">|</span> <span class="kw2">sort</span> <span class="sy0">|</span> <span class="kw2">uniq</span> <span class="sy0">|</span> <span class="kw2">wc</span> -l<span class="sy0">`</span><br />
<span class="kw1">for</span> i <span class="kw1">in</span> <span class="re1">$G</span>; <span class="kw1">do</span> <span class="kw3">echo</span> <span class="re5">-n</span> <span class="st0">&quot;<span class="es2">$i</span> <span class="es5">`id -G $i`</span> &quot;</span>; <span class="kw2">grep</span> :<span class="sy0">`</span><span class="kw2">id</span> <span class="re5">-G</span> <span class="re1">$i</span><span class="sy0">`</span>: <span class="sy0">/</span>etc<span class="sy0">/</span><span class="kw2">passwd</span> <span class="sy0">|</span> <span class="kw2">wc</span> -l; <span class="kw1">done</span>
        </div>
    </div>
</div>

<p>Такие вот пироги.</p>
<p><strong>Мораль истории:</strong> полагаться на то, что пользователь не может увидеть листинг домашних каталогов, глупо: список пользователей можно получить и окольными путями. Гораздо надёжнее ставить безопасные права и не включать разных пользователей в одну группу. Иначе из-за одного скомпрометированного аккаунта может пострадать множество пользователей.</p>
<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/security/875-no-wonder-dreamhost-gets-hacked/">источник</a> обязательно.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.sjinks.pro/security/875-no-wonder-dreamhost-gets-hacked/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>ICS Security Fixes: исправление уязвимостей в прошлых версиях WordPress</title>
		<link>http://blog.sjinks.pro/security/873-ics-security-fixes-old-wordpress/</link>
		<comments>http://blog.sjinks.pro/security/873-ics-security-fixes-old-wordpress/#comments</comments>
		<pubDate>Thu, 02 Dec 2010 14:10:06 +0000</pubDate>
		<dc:creator>Vladimir</dc:creator>
				<category><![CDATA[Безопасность]]></category>
		<category><![CDATA[Плагины WordPress]]></category>
		<category><![CDATA[ICS Security Fixes]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[безопасность]]></category>
		<category><![CDATA[ошибка]]></category>
		<category><![CDATA[плагин]]></category>
		<category><![CDATA[уязвимость]]></category>

		<guid isPermaLink="false">http://blog.sjinks.pro/?p=873</guid>
		<description><![CDATA[Попытка сделать старые версии WordPress безопаснее. Многие блоггеры не торопятся с обновлением WordPress, особенно когда дело касается новых релизов WordPress: по традиции, каждый новый релиз потребляет больше памяти, чем предыдущий, создаёт бóльшую нагрузку на базу и содержит новые, мало кому нужные функции А еще говорят, что нельзя обновляться до версии x.y.0, нужно обязательно ждать x.y.1 Что [...]<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/security/873-ics-security-fixes-old-wordpress/">источник</a> обязательно.</p>]]></description>
			<content:encoded><![CDATA[<h2><em>Попытка сделать старые версии <a href="http://blog.sjinks.pro/tag/wordpress/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  WordPress">WordPress</a> безопаснее.</em></h2>
<p>Многие блоггеры не торопятся с обновлением WordPress, особенно когда дело касается новых релизов WordPress: по традиции, каждый новый релиз потребляет больше памяти, чем предыдущий, создаёт бóльшую нагрузку на базу и содержит новые, мало кому нужные функции <img src='http://static.sjinks.info/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  А еще говорят, что нельзя обновляться до версии x.y.0, нужно обязательно ждать x.y.1 <img src='http://static.sjinks.info/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Что же, доля истины во всём этом есть, но есть и одно большое НО: все эти обновления, включая новые релизы, обычно содержат важные исправления безопасности, причём иногда разработчики об этом могут не догадываться.</p>
<p>К сожалению, разработчики не делают бэкпорты исправлений в старые ветки, и те, кто по тем или иным соображениям остаётся на старом WordPress, остаются уязвимыми.<span id="more-873"></span></p>
<p>Вчера судьба меня свела с человеком с ником <a href="http://snipper.ru/">M4g</a>, обладающим отменными знаниями уязвимостей WordPress самых различных версий. Он любезно предоставил ссылки на свои статьи, касающиеся уязвимостей WordPress. Своё профессиональное знакомство с WordPress я начинал с версии 2.5, поэтому в статьях обнаружил достаточно много откровений для себя. Но дело не в этом. От прочитанного в голову пришла мысль написать <a href="http://blog.sjinks.pro/tag/plugin/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  плагин">плагин</a>, максимально совместимый с предыдущими версиями WordPress, который бы пытался исправить известные уязвимости, не заставляя пользователя при этом обновлять WordPress.</p>
<p>Естественно, что таким образом можно исправить далеко не всё (например, <a href="http://blog.sjinks.pro/tag/vulnerability/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  уязвимость">уязвимость</a> в Snoopy на FreeBSD так не исправить), но отфильтровать параметры запросов или запросы к базе данных вполне реально (хотя тоже не всегда).</p>
<p>Так родился плагин <a href="http://blog.sjinks.pro/tag/ics-security-fixes/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  ICS Security Fixes">ICS Security Fixes</a>.</p>
<p><strong>Версия 0.1 содержит следующие исправления:</strong></p>
<ul>
<li>отключение whitelisting&#8217;а для трэкбэков/пингбэков (то, что было сделано в 3.0.2 и тянется с 1.x);</li>
<li>попытка борьбы с SQL truncation attack при регистрации пользователя;</li>
<li>исправления, призванные не допустить SQL injection attack при обработке трэкбэков;</li>
<li>исправление CVE-2008-4769;</li>
<li>Old slug redirect bug fix;</li>
<li>Попытка исправления ошибки cURL, связанной с перенаправлением на URI с протоколами <code>file://</code> и <code>scp://</code> (трудно сказать про работоспособность, ибо такой древний cURL найти трудно);</li>
<li>Исправление SQL injection в <code>wp_insert_attachment()</code>;</li>
<li>Тупой способ для борьбы с подменой фидов;</li>
<li>Защита от атаки на генератор псевдослучайных чисел (надеюсь, что получилось — сгенерировать 80-гигабайтные радужные таблицы нет возможности);</li>
<li>Попытка защиты от 2.7.x/2.8.x admin remote code execution exploit;</li>
<li>Исправление Wordpress 2.5 Cookie Integrity Protection Vulnerability;</li>
<li>Исправление ошибки со сбросом пароля в 2.5.1.</li>
</ul>
<p><strong>Версия 0.2:</strong></p>
<ul>
<li>Исправление ошибок, связанных с активацией плагина;</li>
<li>Установка версии по умолчанию для скриптов и таблиц стилей в 0.0.</li>
</ul>
<p><strong>Версия 0.3:</strong></p>
<ul>
<li>Исправление ошибок в предыдущих версиях (спасибо <strong><a href="http://profiles.wordpress.org/sergeybiryukov/">Сергею Бирюкову</a></strong> за <a href="http://blog.sjinks.pro/tag/patch/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  патч">патч</a>);</li>
<li>Сокрытие версий используемых таблиц стилей и скриптов (удаление параметра <code>ver</code> из строки запроса; кстати, Google рекомендует <a href="http://code.google.com/intl/ru/speed/page-speed/docs/caching.html#LeverageProxyCaching">не использовать</a> строку запроса в URL статических ресурсов);</li>
<li>Частично закрыта уязвимость <a href="http://secunia.com/advisories/23621/">SA23621</a> — пользователь получает одно и то же сообщение об ошибке и при неверном имени пользователя, и при неверном пароле. Тем не менее, проверка существования пользователя возможна путём использования функции напоминания пароля;</li>
<li>По многочисленным просьбам добавлено сокрытие версии плагина All in One SEO Pack.</li>
</ul>
<p><strong>Версия 0.4:</strong></p>
<ul>
<li>Закрытие уязвимостей, исправленных в WordPress 3.0.5 (r17393, r17387, r17400, r17406).</li>
</ul>
<p>Хочу выразить большую благодарность <strong><a href="http://profiles.wordpress.org/sergeybiryukov/">Сергею Бирюкову</a></strong> за тестирование и патч, исправляющий ошибки. Спасибо!</p>
<p><strong>Дальнейшее направление работы:</strong></p>
<ul>
<li>Бэкпортирование патчей уязвимостей для <a href="http://secunia.com/advisories/product/33191/?task=advisories">серии 3.x</a>;</li>
<li>Бэкпортирование патчей и закрытие незакрытых уязвимостей для <a href="http://secunia.com/advisories/product/6745/?task=advisories">серии 2.x</a>.</li>
</ul>
<p>У кого есть ссылки на рабочие эксплойты для WordPress любых версий и кто может ими поделиться, а также те, кто готов помочь с тестированием — you are welcome!</p>
<p><strong><a href="http://static.sjinks.info/wp-content/uploads/ics-security-fixes-0.4.zip">Скачать последнюю версию ICS Security Fixes</a></strong></p>
<p><strong style="color: red">Внимание:</strong> перед обновлением плагин <strong>должен</strong> быть деактивирован, после обновления — активирован. Это связано с некоторыми неприятными особенностями WordPress 3.1, а также тем, что для некоторых версий WordPress подменяются функции проверки cookies.</p>
<p><strong>UPDATE  Feb 15, 2010:</strong><br />
Страница плагина теперь живёт здесь: http://blog.sjinks.pro/wordpress-plugins/ics-security-fixes/<br />
Страница плагина на wordpress.org: http://wordpress.org/extend/plugins/ics-security-fixes/</p>
<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/security/873-ics-security-fixes-old-wordpress/">источник</a> обязательно.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.sjinks.pro/security/873-ics-security-fixes-old-wordpress/feed/</wfw:commentRss>
		<slash:comments>28</slash:comments>
		</item>
	</channel>
</rss>

