<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Eugene Siu's Thoughts on Security</title><link>http://blogs.msdn.com/esiu/default.aspx</link><description>Share my latest security research and techniques</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>(In)Security of MultiByteToWideChar and WideCharToMultiByte (Part 2)</title><link>http://blogs.msdn.com/esiu/archive/2008/11/14/in-security-of-multibytetowidechar-and-widechartomultibyte-part-2.aspx</link><pubDate>Sat, 15 Nov 2008 08:59:34 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9088621</guid><dc:creator>esiu</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/esiu/comments/9088621.aspx</comments><wfw:commentRss>http://blogs.msdn.com/esiu/commentrss.aspx?PostID=9088621</wfw:commentRss><description>&lt;p&gt;Part 1 of this installment discussed the unsafe nature of MultiByteToWideChar and WideCharToMultiByte.&amp;#160; They do not guarantee terminating strings properly.&amp;#160; In this installment, I want to focus on the count parameters.&amp;#160; There are three count parameters that warrant your attention in order to use these two functions properly.&lt;/p&gt;  &lt;p&gt;Since these two functions deal with conversion, the size of MultiByte and WideChar buffers are expected.&amp;#160; In addition, upon successful return, the number of converted characters is also returned.&amp;#160; These three counts must be carefully provided in order to ensure security.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Rules of thumb&lt;/strong&gt;    &lt;br /&gt;1. MultiByte parameters always expect byte counts, the number of bytes in the corresponding buffer    &lt;br /&gt;2. WideChar parameters always expect character counts, the number of wide characters in the corresponding buffer    &lt;br /&gt;3. Return value follows rule #1 or #2, depending the type of output&lt;/p&gt;  &lt;p&gt;Let’s study a bad example to illustrate some common errors.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;wchar_t wstrTest1[] = L&amp;quot;123456789&amp;quot;;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; char strTest1[9]; &lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; int result = WideCharToMultiByte(CP_UTF8, 0, (LPCWSTR) wstrTest1, sizeof(wstrTest1), strTest1, sizeof(strTest1), NULL, NULL); &lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Using sizeof() seems reasonable for both parameters, as WideCharToMultiByte expects size of the corresponding buffers.&amp;#160; sizeof() returns the byte count of a buffer.&amp;#160; Following the rules of thumb, let’s find the bug.&amp;#160; &lt;/p&gt;  &lt;p&gt;The bug lies in the count of &lt;em&gt;wstrTest1.&amp;#160; &lt;/em&gt;It expects the number of wchar_t characters, rather than the byte count.&amp;#160; The proper value should be character count, not byte count, therefore, &lt;em&gt;sizeof(wstrTest1)/sizeof(wchar_t).&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;The correct call should be as follows:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;int result = WideCharToMultiByte(CP_UTF8, 0,&amp;#160; (LPCWSTR) wstrTest1,        &lt;br /&gt;&lt;/em&gt;&lt;em&gt;sizeof(wstrTest1)/sizeof(wchar_t),        &lt;br /&gt;&lt;/em&gt;&lt;em&gt;strTest1, sizeof(strTest1), NULL, NULL); &lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;What is so bad about getting the count wrong?&amp;#160; It is possible to cause buffer overflows.&amp;#160; Considering MultiByteToWideChar, destination count is expected to be the count of wchar_t.&amp;#160; If the actual size is used, destination size erroneously doubles.&amp;#160; MultiByteToWideChar would gladly copy data up to double the size of the valid buffer.&amp;#160; As a result, buffer overflow occurs.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9088621" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/esiu/archive/tags/Security/default.aspx">Security</category></item><item><title>(In)Security of MultiByteToWideChar and WideCharToMultiByte (Part 1)</title><link>http://blogs.msdn.com/esiu/archive/2008/11/06/in-security-of-multibytetowidechar-and-widechartomultibyte-part-1.aspx</link><pubDate>Thu, 06 Nov 2008 21:22:38 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9050110</guid><dc:creator>esiu</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/esiu/comments/9050110.aspx</comments><wfw:commentRss>http://blogs.msdn.com/esiu/commentrss.aspx?PostID=9050110</wfw:commentRss><description>&lt;p&gt;There are a few well-known unsafe APIs in the standard C library, such as strcpy and memcpy.&amp;#160; These routines are unsafe as buffer and destination buffer size are not taken into consideration.&amp;#160; Buffer overflows may take place because destination buffer is not large enough to hold incoming data.&amp;#160; Safe version of APIs checks that destination buffer has enough spaces to hold the source data.&amp;#160; In addition, strcpy has another potential risk as it does not guarantee production of null-terminating strings. &lt;/p&gt;  &lt;p&gt;A couple functions that are almost as dangerous are still lurking without corresponding safe versions.&amp;#160; They are &lt;a href="http://msdn.microsoft.com/en-us/library/ms776413(VS.85).aspx"&gt;MultiByteToWideChar&lt;/a&gt; and &lt;a href="http://msdn.microsoft.com/en-us/library/ms776420(VS.85).aspx"&gt;WideCharToMultiByte&lt;/a&gt;, which are used for translating strings between Unicode and ANSI.&amp;#160; &lt;a href="http://msdn.microsoft.com/en-us/library/cc500362.aspx"&gt;http://msdn.microsoft.com/en-us/library/cc500362.aspx&lt;/a&gt;.&amp;#160; Similar to strcpy, they are dangerous because they are not guaranteed to produce null-terminated strings.&amp;#160; Unlike strcpy, they return 0 when destination buffer is not large enough.&amp;#160; Even though they perform size checks, I will explain the security pitfalls of using MultiByteToWideChar and WideCharToMultiByte.&amp;#160; &lt;/p&gt;  &lt;p&gt;The first installment focuses on the possibility of producing non-null terminating strings.&amp;#160; Let's start with explaining the return values of MultiByteToWideChar and WideCharToMultiByte.&amp;#160; They return 0 when destination buffer is not large enough, or fails with other reasons.&amp;#160; They return the number of characters saved in the destination buffer if execution is successful.&amp;#160; Non-null terminated strings can be produced by both successful and unsuccessful execution of these APIs.&amp;#160; Let's illustrate them with a couple examples.&amp;#160; WideCharToMultiByte is used in all examples, as the same principle applies to MultiByteToWideChar too. &lt;/p&gt;  &lt;p&gt;&lt;em&gt;&amp;#160;&amp;#160;&amp;#160; wchar_t wstrTest1[] = L&amp;quot;123456789&amp;quot;;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; char strTest1[9]; &lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&amp;#160;&amp;#160;&amp;#160; // Case 1: Parse 2 characters without a null-terminating character      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; int result = WideCharToMultiByte(CP_UTF8, 0, (LPCWSTR) wstrTest1, 2, strTest1, sizeof(strTest1), NULL, NULL); &lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&amp;#160;&amp;#160;&amp;#160; // Result: 2 (Success) strTest1: 2 characters long without null-terminated      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; printf(&amp;quot;Result: %d\n&amp;quot;, result);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; printf(&amp;quot;Converted: %s\n&amp;quot;, strTest1); &lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&amp;#160;&amp;#160;&amp;#160; // Case 2: Parse all characters, which are larger than the destination buffer      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; result = WideCharToMultiByte(CP_UTF8, 0, (LPCWSTR) wstrTest1, 10, strTest1, sizeof(strTest1), NULL, NULL); &lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&amp;#160;&amp;#160;&amp;#160; // Result: 0 (Fail) strTest1: 9 characters long without null-terminated      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; printf(&amp;quot;Result: %d\n&amp;quot;, result);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; printf(&amp;quot;Converted: %s\n&amp;quot;, strTest1); &lt;/em&gt;&lt;/p&gt;  &lt;p&gt;From these two code examples, it illustrates that both successful and unsuccessful execution can result in non-null terminated strings.&amp;#160; In the first code example, WideCharToMultiByte is asked to process two characters without a trailing null character.&amp;#160; WideCharToMultiByte successfully converts the first two characters, but does not terminate the output string with a null character.&amp;#160; This case is somewhat acceptable as &amp;quot;garbage in, garbage out&amp;quot; principle applies.&lt;/p&gt;  &lt;p&gt;However, the second case is worse. Destination buffer is not large enough to hold translated data.&amp;#160; WideCharToMultiByte fails correctly by returning 0, but destination buffer is nevertheless filled with data without a null trailing character.&amp;#160; If destination buffer is used without checking return value, a non-null terminating string will propagate through subsequent use of the string.&lt;/p&gt;  &lt;p&gt;Some developers are aware of this issue, and they have an elegant way of handling the return value.&amp;#160; They add a null character to the destination buffer at the index indicated by the return value.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;em&gt;&amp;#160;&amp;#160;&amp;#160; wchar_t wstrTest1[] = L&amp;quot;123456789&amp;quot;;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; char strTest1[9]; &lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&amp;#160;&amp;#160;&amp;#160; // Parse 2 characters without a null-terminating character      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; int result = WideCharToMultiByte(CP_UTF8, 0, (LPCWSTR) wstrTest1, 2, strTest1, sizeof(strTest1), NULL, NULL);&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&amp;#160;&amp;#160;&amp;#160; // Some developers add this check      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; strTest1[result] = NULL; &lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&amp;#160;&amp;#160;&amp;#160; // Result: 2 (Success) strTest1: 2 characters long and null-terminated      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; printf(&amp;quot;Result: %d\n&amp;quot;, result);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; printf(&amp;quot;Converted: %s\n&amp;quot;, strTest1); &lt;/em&gt;&lt;/p&gt;  &lt;p&gt;When WideCharToMultiByte fails, it returns 0, and strTest1[0] is set to NULL.&amp;#160; It is a reasonable outcome because failed execution should return an empty string.&amp;#160; On the other hand,&amp;#160; When WideCharToMultiByte succeeds, it returns the number of characters written to the destination buffer. strTest1[result] means that a null character is appended to the return string.&lt;/p&gt;  &lt;p&gt;The above code works very elegantly in most cases, except a boundary case.&amp;#160; It is always the boundary case, isn’t it?&amp;#160; It has a subtle non-exploitable buffer overflow bug.&amp;#160; What happen if the return value is equal to number of characters allowed in the destination buffer?&amp;#160; &lt;/p&gt;  &lt;p&gt;When that occurs, a null character is written past the end of the destination buffer.&amp;#160; It can potentially destabilize the system and cause denial of service. There are many ways to fix this issue.&amp;#160; A fix is to add a conditional statement to handle where return value is equal to the number of characters in the buffer.&amp;#160; Another fix is to increase the size of destination buffer by 1 to accommodate the extra null character.&amp;#160; This example illustrates the first fix.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&amp;#160;&amp;#160;&amp;#160; wchar_t wstrTest1[] = L&amp;quot;123456789&amp;quot;;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; char strTest1[10]; &lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&amp;#160;&amp;#160;&amp;#160; // Parse all characters      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; int result = WideCharToMultiByte(CP_UTF8, 0, (LPCWSTR) wstrTest1, 10, strTest1, sizeof(strTest1), NULL, NULL);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; if (result == sizeof(strTest1))       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; strTest1[result-1] = NULL;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; else       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; strTest1[result] = NULL; &lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&amp;#160;&amp;#160;&amp;#160; // Result: 10 (Success) strTest1: 9 characters long and null-terminated      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; printf(&amp;quot;Result: %d\n&amp;quot;, result);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; printf(&amp;quot;Converted: %s\n&amp;quot;, strTest1); &lt;/em&gt;&lt;/p&gt;  &lt;h3&gt;&lt;strong&gt;Developer Checklist&lt;/strong&gt;&lt;/h3&gt;  &lt;p&gt;1. Always check the return values of MultiByteToWideChar and WideCharToMultiByte.&amp;#160; If not, code reviewers should file them as bugs    &lt;br /&gt;2. Adopt the suggested fixes if you don’t need any custom error handling&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;There are more common pitfalls related to using these two APIs.&amp;#160; It will be in the next installment.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9050110" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/esiu/archive/tags/Security/default.aspx">Security</category></item><item><title>My favorite security blogs and podcasts</title><link>http://blogs.msdn.com/esiu/archive/2008/10/23/my-favorite-security-blogs-and-podcasts.aspx</link><pubDate>Fri, 24 Oct 2008 04:18:04 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9013968</guid><dc:creator>esiu</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/esiu/comments/9013968.aspx</comments><wfw:commentRss>http://blogs.msdn.com/esiu/commentrss.aspx?PostID=9013968</wfw:commentRss><description>&lt;p&gt;What are your favorite security blogs or podcasts?&amp;#160; Here are mine.&amp;#160; Please leave yours in the comment section.&lt;/p&gt;  &lt;h2&gt;&lt;strong&gt;Podcasts&lt;/strong&gt;&lt;/h2&gt;  &lt;p&gt;Security Now (&lt;a title="http://www.grc.com/securitynow.htm" href="http://www.grc.com/securitynow.htm"&gt;http://www.grc.com/securitynow.htm&lt;/a&gt;)&lt;/p&gt;  &lt;p&gt;CNet Security Bites (&lt;a href="http://securitybites.cnet.com"&gt;http://securitybites.cnet.com&lt;/a&gt;)&lt;/p&gt;  &lt;h2&gt;&lt;strong&gt;Blogs&lt;/strong&gt;&lt;/h2&gt;  &lt;p&gt;Schneier on Security    &lt;br /&gt;&lt;a href="http://feeds.feedburner.com/schneier/fulltext"&gt;http://feeds.feedburner.com/schneier/fulltext&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Security Vulnerability Research &amp;amp; Defense    &lt;br /&gt;&lt;a href="http://blogs.technet.com/swi/rss.xml"&gt;http://blogs.technet.com/swi/rss.xml&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The Microsoft Security Response Center (MSRC)    &lt;br /&gt;&lt;a href="http://blogs.technet.com/msrc/rss.xml"&gt;http://blogs.technet.com/msrc/rss.xml&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Dark Reading    &lt;br /&gt;&lt;a href="http://www.darkreading.com/"&gt;http://www.darkreading.com/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The Security Development Lifecycle    &lt;br /&gt;&lt;a href="http://blogs.msdn.com/sdl/rss.xml"&gt;http://blogs.msdn.com/sdl/rss.xml&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Microsoft Hackers blog    &lt;br /&gt;&lt;a title="http://blogs.msdn.com/hackers/" href="http://blogs.msdn.com/hackers/"&gt;http://blogs.msdn.com/hackers/&lt;/a&gt;&lt;/p&gt; Mark Curphey - SecurityBuddha.com   &lt;br /&gt;&lt;a href="http://securitybuddha.com/feed/"&gt;http://securitybuddha.com/feed/&lt;/a&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9013968" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/esiu/archive/tags/Security/default.aspx">Security</category></item><item><title>“Out of Band” security patch MS08-067</title><link>http://blogs.msdn.com/esiu/archive/2008/10/23/out-of-band-security-patch-ms08-067.aspx</link><pubDate>Fri, 24 Oct 2008 03:52:18 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9013938</guid><dc:creator>esiu</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/esiu/comments/9013938.aspx</comments><wfw:commentRss>http://blogs.msdn.com/esiu/commentrss.aspx?PostID=9013938</wfw:commentRss><description>&lt;p&gt;Out of Band security patch MS08-067 is released today.&amp;#160; Microsoft strives to keep our monthly patch Tuesday release cycle so that enterprise administrators can plan ahead for their testing and deployment.&amp;#160; When out of band is released, it must be very urgent due to serious ramifications or presence of known exploits in the wild.&amp;#160; You should install this patch as soon as possible.&lt;/p&gt;  &lt;p&gt;MS08-067 fixes a vulnerability in the Server service that would allow malicious code to remotely execute code on successfully exploited computers.&lt;/p&gt;  &lt;p&gt;This impacts all versions of Windows.&amp;#160; Bug severity is critical for platforms other than Windows Vista and Windows Server 2008.&amp;#160; For Vista and Windows Server 2008, its severity is important.&lt;/p&gt;  &lt;p&gt;For more information, please refer to &lt;a href="http://www.microsoft.com/technet/security/bulletin/ms08-oct.mspx"&gt;http://www.microsoft.com/technet/security/bulletin/ms08-oct.mspx&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9013938" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/esiu/archive/tags/Security/default.aspx">Security</category></item><item><title>What is unique about patch Tuesday of October 2008?</title><link>http://blogs.msdn.com/esiu/archive/2008/10/15/what-is-unique-about-patch-tuesday-of-october-2008.aspx</link><pubDate>Thu, 16 Oct 2008 02:48:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9001204</guid><dc:creator>esiu</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/esiu/comments/9001204.aspx</comments><wfw:commentRss>http://blogs.msdn.com/esiu/commentrss.aspx?PostID=9001204</wfw:commentRss><description>&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:ac22d348-01a4-4c76-abdd-2a0a127e6406" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Security" rel="tag"&gt;Security&lt;/a&gt;&lt;/div&gt;  &lt;p&gt;Every second Tuesday, MSRC releases security patches for Microsoft products that have fixed vulnerabilities.&amp;#160; The best is to have no patches for patch Tuesdays, and many administrators can take a break from installing patches across their server farms and enterprise desktops.&amp;#160; It will be a long road ahead before Microsoft can get to zero security bugs for all products.&lt;/p&gt;  &lt;p&gt;Before reaching the elusive zero-bug milestone, Microsoft continues to innovate on security bug release process to better inform the public of those vulnerabilities so that administrators can make informed decisions on their patching schedule.&lt;/p&gt;  &lt;p&gt;From &lt;a href="http://blogs.technet.com/swi/archive/2008/10/14/bulletin-severity-for-october-bulletins.aspx" mce_href="http://blogs.technet.com/swi/archive/2008/10/14/bulletin-severity-for-october-bulletins.aspx"&gt;October 2008 patch Tuesday&lt;/a&gt;, &lt;a href="http://technet.microsoft.com/en-us/security/cc998259.aspx" mce_href="http://technet.microsoft.com/en-us/security/cc998259.aspx"&gt;Exploitability Index&lt;/a&gt; will be associated with each bulletin.&amp;#160; Exploitability index is a number from 1 to 3 to indicating exploitability, with 1 being the most serious in terms of exploitability.&lt;/p&gt;  &lt;div align="center"&gt;   &lt;table class="class" border="1" cellspacing="0" cellpadding="2" width="414" align="center"&gt;&lt;tbody&gt;       &lt;tr&gt;         &lt;td class="class" valign="top" width="200"&gt;&lt;strong&gt;Exploitability Index Assessment&lt;/strong&gt;&lt;/td&gt;          &lt;td class="class" valign="top" width="212"&gt;&lt;strong&gt;Short Definition&lt;/strong&gt;&lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td class="class" valign="top" width="200"&gt;1&lt;/td&gt;          &lt;td class="class" valign="top" width="212"&gt;Consistent exploit code likely&lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td class="class" valign="top" width="200"&gt;2&lt;/td&gt;          &lt;td class="class" valign="top" width="212"&gt;Inconsistent exploit code likely&lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td class="class" valign="top" width="200"&gt;3&lt;/td&gt;          &lt;td class="class" valign="top" width="212"&gt;Functioning exploit code unlikely&lt;/td&gt;       &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt; &lt;/div&gt;  &lt;p mce_keep="true"&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Here is another data point to measure risk and decide on priority of patching for any given bulletins.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9001204" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/esiu/archive/tags/Security/default.aspx">Security</category></item><item><title>&lt;script&gt;alert()&lt;/script&gt;</title><link>http://blogs.msdn.com/esiu/archive/2008/03/25/script-alert-script.aspx</link><pubDate>Wed, 26 Mar 2008 03:14:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8336860</guid><dc:creator>esiu</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/esiu/comments/8336860.aspx</comments><wfw:commentRss>http://blogs.msdn.com/esiu/commentrss.aspx?PostID=8336860</wfw:commentRss><description>&amp;lt;script&amp;gt;alert()&amp;lt;/script&amp;gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8336860" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/esiu/archive/tags/_2600_lt_3B00_script_2600_gt_3B00_alert_280029002600_lt_3B002F00_script_2600_gt_3B00_/default.aspx">&amp;lt;script&amp;gt;alert()&amp;lt;/script&amp;gt;</category></item><item><title>Troubleshooting Networking and IPSec Issues</title><link>http://blogs.msdn.com/esiu/archive/2007/11/05/troubleshooting-networking-and-ipsec-issues.aspx</link><pubDate>Mon, 05 Nov 2007 11:30:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:5903070</guid><dc:creator>esiu</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/esiu/comments/5903070.aspx</comments><wfw:commentRss>http://blogs.msdn.com/esiu/commentrss.aspx?PostID=5903070</wfw:commentRss><description>&lt;BLOCKQUOTE&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;I had a very strange networking issue last weekend.&amp;nbsp; After connecting to corpnet via VPN and direct hookup, I was able to ping all remote servers, but was not able to do anything, such as web browsing and remote desktop.&amp;nbsp; It was not the first time that I faced this issue, and helpdesk told me that IPSec settings may have messed up.&lt;/P&gt;
&lt;P&gt;The following set of commands has helped me flush settings related to networking and IPSec, and restored my corpnet connection in both situations.&lt;/P&gt;
&lt;P&gt;1. Launch a DOS command prompt&lt;BR&gt;2. netsh int ip reset all&lt;BR&gt;3. netsh winsock reset&lt;BR&gt;4. ipconfig /flushdns&lt;BR&gt;5. nbtstat -RR&lt;BR&gt;6. gpupdate /force&lt;/P&gt;
&lt;P&gt;Akin to "Ctrl-Atl-Del" of your networking settings, this series of commands should flush IP interface, DNS, Winsock, NetBIOS and group policy settings.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Good luck to troubleshooting your networking and IPSec issues.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=5903070" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/esiu/archive/tags/Developer+Productivity/default.aspx">Developer Productivity</category><category domain="http://blogs.msdn.com/esiu/archive/tags/Infoworker+Productivity/default.aspx">Infoworker Productivity</category></item><item><title>ASP.NET ValidateRequest does not mitigate XSS completely</title><link>http://blogs.msdn.com/esiu/archive/2007/10/19/asp-net-validaterequest-does-not-mitigate-xss-completely.aspx</link><pubDate>Sat, 20 Oct 2007 00:26:17 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:5529155</guid><dc:creator>esiu</dc:creator><slash:comments>5</slash:comments><comments>http://blogs.msdn.com/esiu/comments/5529155.aspx</comments><wfw:commentRss>http://blogs.msdn.com/esiu/commentrss.aspx?PostID=5529155</wfw:commentRss><description>&lt;p&gt;As a security guy, I can safely say that there is no magic bullet to mitigate any security problems completely, and cross-site scripting(XSS) bugs are not exceptions.&amp;nbsp; Since ASP.NET 1.1, ValidateRequest can be configured in web.config to check and reject dangerous inputs, and &lt;a href="http://msdn2.microsoft.com/en-us/library/system.web.httprequestvalidationexception(vs.80).aspx"&gt;HttpRequestValidationException&lt;/a&gt;&amp;nbsp;is thrown before the input is even processed by your code.&amp;nbsp; For example, &lt;em&gt;&amp;lt;script&amp;gt;&lt;/em&gt; would be caught by ValidateRequest.&lt;/p&gt; &lt;p&gt;During my security reviews, I routinely find that many web applications turn on ValidateRequest (It is on by default), and do not follow XSS mitigation techniques, such as output encoding by HTMLEncode or &lt;a href="http://msdn2.microsoft.com/en-us/library/aa973813.aspx"&gt;ACE Anti-XSS library&lt;/a&gt;.&amp;nbsp; They believe that ValidateRequest can fix all XSS problems.&lt;/p&gt; &lt;p&gt;However, there are a couple downsides of relying on ValidateRequest:&lt;br&gt;1. ValidateRequest may miss some crafty inputs.&amp;nbsp; Please read MS07-040 for &lt;a href="http://www.microsoft.com/technet/security/Bulletin/MS07-040.mspx"&gt;a recent MSRC fix&lt;/a&gt; on ValidateRequest.&lt;/p&gt; &lt;p&gt;2. ValidateRequest cannot be turned on in all cases, as characters that trigger XSS may also be needed in valid user scenarios.&amp;nbsp; For example, AJAX transmits XML blobs between client and server,&amp;nbsp;but ValidateRequest will throw &lt;a href="http://msdn2.microsoft.com/en-us/library/system.web.httprequestvalidationexception(vs.80).aspx"&gt;HttpRequestValidationException&lt;/a&gt;&amp;nbsp;as it contains "dangerous" characters, such as &amp;lt; and &amp;gt;.&amp;nbsp; Exchange 2007 OWA cannot run with ValidateRequest turned on.&amp;nbsp; &lt;/p&gt; &lt;p&gt;In conclusion, ValidateRequest should be turned on if it does not block valid user scenarios.&amp;nbsp; However, even with ValidateRequest turned on, it MUST not be regarded as a sure-fire way to mitigate XSS.&amp;nbsp; Please read &lt;a title="http://msdn2.microsoft.com/en-us/library/ms998274.aspx" href="http://msdn2.microsoft.com/en-us/library/ms998274.aspx"&gt;http://msdn2.microsoft.com/en-us/library/ms998274.aspx&lt;/a&gt;&amp;nbsp;for full XSS mitigation.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=5529155" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/esiu/archive/tags/IIS/default.aspx">IIS</category><category domain="http://blogs.msdn.com/esiu/archive/tags/Security/default.aspx">Security</category></item><item><title>Read Office Files as ZIP</title><link>http://blogs.msdn.com/esiu/archive/2007/10/19/read-office-files-as-zip.aspx</link><pubDate>Fri, 19 Oct 2007 22:33:38 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:5527832</guid><dc:creator>esiu</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/esiu/comments/5527832.aspx</comments><wfw:commentRss>http://blogs.msdn.com/esiu/commentrss.aspx?PostID=5527832</wfw:commentRss><description>&lt;p&gt;It is interesting to me that Office 2007 Metro formats can be broken down as a ZIP file.&amp;nbsp; To see this in action, you can pick an Office 2007 Metro file, such as XLSX and DOCX, and rename its extension with ZIP.&amp;nbsp; Then open the renamed file with WINZIP.&amp;nbsp; You will see that Office 2007 content is laid out neatly in a ZIP.&amp;nbsp; Check out this sample picture.&lt;/p&gt; &lt;p&gt;Let me illustrate a picture from &lt;a title="http://www.devx.com/MicrosoftISV/Article/34934" href="http://www.devx.com/MicrosoftISV/Article/34934"&gt;http://www.devx.com/MicrosoftISV/Article/34934&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;img alt="" src="http://assets.devx.com/destination/19678.jpg" border="0"&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=5527832" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/esiu/archive/tags/Infoworker+Productivity/default.aspx">Infoworker Productivity</category></item><item><title>Is Microsoft Office Isolated Conversion Environment(MOICE) mocha on ice?</title><link>http://blogs.msdn.com/esiu/archive/2007/10/19/is-microsoft-office-isolated-conversion-environment-moice-mocha-on-ice.aspx</link><pubDate>Fri, 19 Oct 2007 21:49:38 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:5527373</guid><dc:creator>esiu</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/esiu/comments/5527373.aspx</comments><wfw:commentRss>http://blogs.msdn.com/esiu/commentrss.aspx?PostID=5527373</wfw:commentRss><description>&lt;p&gt;MOICE may sound like mocha on ice, but it is really a strong dark espresso shot offered by Office TWC team to jolt up security.&amp;nbsp; Microsoft Office Isolated Conversion Environment (MOICE) is a new security tool that helps protect Office users from malicious documents. Office team strives to&amp;nbsp;enhance their security, and&amp;nbsp;MOICE is another evidence that they are committed to security.&amp;nbsp; &lt;/p&gt; &lt;p&gt;MOICE converts Office 2003 documents of supported types to Office 2007 XML formats (Metro) in an isolated environment.&amp;nbsp; Granted that the same conversion engine is used in the Microsoft Office Compatibility Pack, how does running in an isolated environment enhance security?&lt;/p&gt; &lt;p&gt;Think of wearing pads and helmets while playing American football.&amp;nbsp; It is the nature of American football that players will get hit hard.&amp;nbsp; Wearing pads and helmets does not change the nature of American football, but it does&amp;nbsp;lessen the chance&amp;nbsp;of inflicting serious injuries on players&lt;/p&gt; &lt;p&gt;The same principle applies to MOICE.&amp;nbsp; MOICE does not alter the fact that malicious documents are out there to&amp;nbsp;exploit vulnerable machines.&amp;nbsp; MOICE is like a pad and a helmet to reduce the chance of Office softwares being being exploited.&amp;nbsp; Exploitation may still happen, but isolated environment provided by MOICE reduces possible damages inflicted by the malicious documents.&lt;/p&gt; &lt;p&gt;In addition, applying MOICE is as simple as putting on a pad and a helmet.&amp;nbsp; MOICE can be installed as a recommended update via Microsoft Update, and execution of ASSOC&amp;nbsp;replaces regular rendering with MOICE.&amp;nbsp; For more information, please visit &lt;a title="http://support.microsoft.com/kb/935865" href="http://support.microsoft.com/kb/935865"&gt;http://support.microsoft.com/kb/935865&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Last but not least, MOICE is not a replacement of properly patching your machines.&amp;nbsp; Now, go patch your machines, enjoy a cup of MOICE and most importantly,&amp;nbsp;don't click on suspicious Office documents via emails.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=5527373" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/esiu/archive/tags/Security/default.aspx">Security</category></item><item><title>True test of a security geek</title><link>http://blogs.msdn.com/esiu/archive/2007/10/11/true-test-of-a-security-geek.aspx</link><pubDate>Thu, 11 Oct 2007 11:18:33 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:5399071</guid><dc:creator>esiu</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/esiu/comments/5399071.aspx</comments><wfw:commentRss>http://blogs.msdn.com/esiu/commentrss.aspx?PostID=5399071</wfw:commentRss><description>&lt;p&gt;&lt;/p&gt; &lt;p&gt;If you chuckle at this comic strip, congratulations!&amp;nbsp; You are a security geek.&amp;nbsp; If you don't chuckle, it is never too late to become one.&amp;nbsp; Read my blog more, and you will become one.&lt;/p&gt; &lt;p&gt;&lt;a href="http://securitybuddha.files.wordpress.com/2007/10/exploits-of-a-mom.png"&gt;&lt;img height="127" alt="exploits_of_a_mom" src="http://securitybuddha.files.wordpress.com/2007/10/exploits-of-a-mom-thumb.png?w=404&amp;amp;h=127" width="404" border="0"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Thanks &lt;a href="http://blogs.msdn.com/techjunkie"&gt;TechJunkie&lt;/a&gt; for forwarding.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=5399071" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/esiu/archive/tags/Security/default.aspx">Security</category></item><item><title>Given enough eyeballs all bugs are shallow: True or False?</title><link>http://blogs.msdn.com/esiu/archive/2007/10/11/given-enough-eyeballs-all-bugs-are-shallow-true-or-false.aspx</link><pubDate>Thu, 11 Oct 2007 10:18:10 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:5398267</guid><dc:creator>esiu</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/esiu/comments/5398267.aspx</comments><wfw:commentRss>http://blogs.msdn.com/esiu/commentrss.aspx?PostID=5398267</wfw:commentRss><description>&lt;p&gt;"Given enough eyeballs all bugs are shallow."&amp;nbsp; I do agree if more right-minded folks look at a piece of code, it would help identify both security and non-security bugs.&amp;nbsp; This premise is built on the assumption that all reviewers have the best intentions in mind.&amp;nbsp; However, do all people have the best intentions in mind?&amp;nbsp; If all do, we will not&amp;nbsp;need law enforcement officials.&lt;/p&gt; &lt;p&gt;Obviously there will be some malicious and devious "eyeballs" out there.&amp;nbsp; Rather than identifying bugs, they plant bugs in open source softwares.&amp;nbsp; This attack is named "Cross-Build Injection".&amp;nbsp; Fortify just published an article with reported incidents related to OpenSSH, SendMail and IRSSI.&amp;nbsp; Check out &lt;a href="http://www.fortifysoftware.com/servlet/downloads/public/fortify_attacking_the_build.pdf"&gt;http://www.fortifysoftware.com/servlet/downloads/public/fortify_attacking_the_build.pdf&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=5398267" width="1" height="1"&gt;</description></item><item><title>System.URI.AbsolutePath Vs Phishing Attack</title><link>http://blogs.msdn.com/esiu/archive/2007/10/10/system-uri-absolutepath-vs-phishing-attack.aspx</link><pubDate>Thu, 11 Oct 2007 06:09:06 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:5396592</guid><dc:creator>esiu</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/esiu/comments/5396592.aspx</comments><wfw:commentRss>http://blogs.msdn.com/esiu/commentrss.aspx?PostID=5396592</wfw:commentRss><description>&lt;p&gt;&lt;/p&gt; &lt;p&gt;Phishing attack can be caused by&amp;nbsp;users&amp;nbsp;inadvertently clicking on malicious links in emails or web pages, which then forward requests to malicious websites.&amp;nbsp;&amp;nbsp;A common phishing technique&amp;nbsp;is to fake emails sent by well-known banks or merchants,, which contain malicious hyperlinks.&amp;nbsp; Successful phishing attacks allow attackers to steal&amp;nbsp;online user identities, install malwares on the users' computers, etc.&lt;/p&gt; &lt;p&gt;A careful user named Clever John checks each link before clicking it.&amp;nbsp; Some common phishing emails contain links with IP addresses, for example, &lt;strong&gt;http://123.123.123.123/notice&lt;/strong&gt;&lt;strong&gt;.aspx&lt;/strong&gt;.&amp;nbsp; Obviously, famous banks or merchants are not likely to use IP addresses on their public announcement emails.&amp;nbsp; Clever John decides not to click on emails that contain those suspicious links.&amp;nbsp; &lt;/p&gt; &lt;p&gt;What happen if the link is &lt;strong&gt;http://www.famousbank.com/notice.aspx?redirect=http%3a%2f%2f123.123.123.123%2fnotice.aspx&lt;/strong&gt;&lt;em&gt;?&lt;/em&gt;&amp;nbsp; This time Clever John checks the link as usual, and sees that it is originated from &lt;strong&gt;http://www.famousbank.com&lt;/strong&gt;.&amp;nbsp; In addition, the email graphically looks very convincing.&amp;nbsp; Little does&amp;nbsp;Clever John know that he just gets attacked by a phisher who exploits a phishing security&amp;nbsp;bug on &lt;strong&gt;http://www.famousbank.com&lt;/strong&gt;, and malwares are installed on his machine quietly, as a result.&lt;/p&gt; &lt;p&gt;Let's analyze the code behind the phising security hole.&amp;nbsp; Here is sample code that is susceptible to phishing attack:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;em&gt;String redirectsite = request["redirect"];&lt;br&gt;response.Redirect(redirectsite);&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Basically, the&amp;nbsp;code redirects the server response to a&amp;nbsp;location specified by redirect parameter in the request.&amp;nbsp; This is a common scenario, for example, redirecting to home pages upon logoff in the form of &lt;strong&gt;http://www.famousbank.com/logoff.aspx?redirect=home.htm&lt;/strong&gt;.&amp;nbsp; Unfortunately, since redirect parameter is not verified, attackers exploit&amp;nbsp;the hole&amp;nbsp;to redirect requests to any sites of their choice.&lt;/p&gt; &lt;p&gt;In order to fix this bug, the redirect parameter&amp;nbsp;MUST be validated.&lt;br&gt;* If the response should only be redirected to links of the same site, please check for "&lt;em&gt;//"&lt;/em&gt;.&amp;nbsp; If "//" is present, it should be deemed as an invalid request.&lt;br&gt;* If the response can be redirected to external sites, more intelligent filtering must be in place.&amp;nbsp;&amp;nbsp;Define all the valid sites that can be redirected, and allow to be redirected to only those valid sites.&amp;nbsp; &lt;/p&gt; &lt;p&gt;Someone asked if &lt;a href="http://msdn2.microsoft.com/en-us/library/system.uri(vs.80).aspx"&gt;System.URI.AbsolutePath&lt;/a&gt; can be used to strip hostname and port number as a mitigation.&amp;nbsp; Then, redirect to the&amp;nbsp;location returned by &lt;a href="http://msdn2.microsoft.com/en-us/library/system.uri(vs.80).aspx"&gt;System.URI.AbsolutePath&lt;/a&gt;.&amp;nbsp; &lt;/p&gt; &lt;p&gt;Let's analyze what &lt;a href="http://msdn2.microsoft.com/en-us/library/system.uri(vs.80).aspx"&gt;System.URI.AbsolutePath&lt;/a&gt;&amp;nbsp;does.&amp;nbsp; &lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;em&gt;// link0.AbsolutePath returns "&lt;strong&gt;/default.aspx&lt;/strong&gt;"&lt;br&gt;&lt;/em&gt;&lt;em&gt;Uri link0 = new Uri("&lt;strong&gt;http://www.evil.com/default.aspx&lt;/strong&gt;");&amp;nbsp;&lt;/em&gt;&lt;/p&gt; &lt;p&gt;&lt;em&gt;// link1.AbsolutePath returns "&lt;strong&gt;//www.evil.com/default.aspx&lt;/strong&gt;"&lt;br&gt;Uri link1 = new Uri("&lt;strong&gt;http://www.evil.com//www.evil.com/default.aspx"&lt;/strong&gt;);&amp;nbsp;&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;You may think "&lt;strong&gt;&lt;em&gt;//www.evil.com/default.aspx&lt;/em&gt;&lt;/strong&gt;" is not a valid address because it does not start with "&lt;strong&gt;&lt;em&gt;http:&lt;/em&gt;&lt;/strong&gt;".&amp;nbsp; However, web browsers, such as IE and Fire, would gladly prepend "&lt;em&gt;&lt;strong&gt;http:&lt;/strong&gt;"&lt;/em&gt; in front of&amp;nbsp;"&lt;strong&gt;&lt;em&gt;//www.evil.com/default.aspx&lt;/em&gt;&lt;/strong&gt;", and redirect to &lt;strong&gt;http://www.evil.com/default.aspx&lt;/strong&gt;.&amp;nbsp; In other words, AbsolutePath alone is not effective against phishing security hole.&lt;/p&gt; &lt;p&gt;Phishing Attack wins in this heads-on "System.URI.AbsolutePath Vs Phishing Attack" battle .&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=5396592" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/esiu/archive/tags/Security/default.aspx">Security</category></item><item><title>Web Service Security Guidance</title><link>http://blogs.msdn.com/esiu/archive/2007/10/10/web-service-security-guidance.aspx</link><pubDate>Thu, 11 Oct 2007 02:56:27 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:5395473</guid><dc:creator>esiu</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/esiu/comments/5395473.aspx</comments><wfw:commentRss>http://blogs.msdn.com/esiu/commentrss.aspx?PostID=5395473</wfw:commentRss><description>&lt;p&gt;I have just published a Technet&amp;nbsp;article.&amp;nbsp; This is geared for administrators and developers as an introduction&amp;nbsp;to web service security.&amp;nbsp; It contains lots of references that allow you to&amp;nbsp;deepend your knowledge of web service security.&lt;/p&gt; &lt;p&gt;Please visit &lt;a title="http://www.microsoft.com/technet/community/columns/sectip/st1007.mspx" href="http://www.microsoft.com/technet/community/columns/sectip/st1007.mspx"&gt;http://www.microsoft.com/technet/community/columns/sectip/st1007.mspx&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Your feedback is welcome.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=5395473" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/esiu/archive/tags/Security/default.aspx">Security</category></item><item><title>More eyeballs for .Net Framework code</title><link>http://blogs.msdn.com/esiu/archive/2007/10/04/more-eyeballs-for-net-framework-code.aspx</link><pubDate>Fri, 05 Oct 2007 05:49:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:5282148</guid><dc:creator>esiu</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/esiu/comments/5282148.aspx</comments><wfw:commentRss>http://blogs.msdn.com/esiu/commentrss.aspx?PostID=5282148</wfw:commentRss><description>&lt;P&gt;Microsoft will open up source code of .Net Framework to the public.&amp;nbsp; It allows outsiders to review what is under the hood, and enables easier debugging of development projects around .Net Framework.&amp;nbsp; .Net Framework code has been reviewed heavily, and developers can pick up coding best practices by reviewing source code of .Net Framework.&lt;/P&gt;
&lt;P&gt;The following libraries are available:&lt;BR&gt;* Net Base Class Libraries (including System, System.IO, System.Collections, System.Configuration, System.Threading, System.Net, System.Security, System.Runtime, and System.Text).&lt;BR&gt;* ASP.Net (System.Web).&lt;BR&gt;* Windows Forms (System.Windows.Forms).&lt;BR&gt;* ADO.NET (System.Data).&lt;BR&gt;* XML (System.Xml).&lt;BR&gt;* Windows Presentation Foundation (System.Windows)&lt;/P&gt;
&lt;P&gt;Source code is made available under the Microsoft Reference License, which is intended for developers to have read-only access.&amp;nbsp; However, it does not allow modification or distribution.&lt;/P&gt;
&lt;P&gt;An additional feature: It supports JIT code download for debugging in the final release of Visual Studio 2008.&amp;nbsp; If set up properly, you don't need to download all source code on your box.&amp;nbsp; You can get it when you need it transparently.&lt;/P&gt;
&lt;P&gt;You can read this &lt;A href="http://weblogs.asp.net/scottgu/archive/2007/10/03/releasing-the-source-code-for-the-net-framework-libraries.aspx" mce_href="http://weblogs.asp.net/scottgu/archive/2007/10/03/releasing-the-source-code-for-the-net-framework-libraries.aspx"&gt;article&lt;/A&gt; for more details.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=5282148" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/esiu/archive/tags/Developer+Productivity/default.aspx">Developer Productivity</category></item></channel></rss>