Graphics Programs Reference
In-Depth Information
unencrypted services such as telnet, rsh, and rcp. However, there was an off-
by-one error in the channel-allocation code that was heavily exploited. Specific-
ally, the code included an if statement that read:
i f (id < 0 || id > channels_alloc) {
It should have been
if (id < 0 || id >= channels_alloc) {
In plain English, the code reads If the ID is less than 0 or the ID is greater
than the channels allocated, do the following stuff , when it should have been If the
ID is less than 0 or the ID is greater than or equal to the channels allocated, do the
following stuff .
This simple off-by-one error allowed further exploitation of the pro-
gram, so that a normal user authenticating and logging in could gain full
administrative rights to the system. This type of functionality certainly wasn't
what the programmers had intended for a secure program like OpenSSH,
but a computer can only do what it's told.
Another situation that seems to breed exploitable programmer errors is
when a program is quickly modified to expand its functionality. While this
increase in functionality makes the program more marketable and increases
its value, it also increases the program's complexity, which increases the
chances of an oversight. Microsoft's IIS webserver program is designed to
serve static and interactive web content to users. In order to accomplish this,
the program must allow users to read, write, and execute programs and files
within certain directories; however, this functionality must be limited to those
particular directories. Without this limitation, users would have full control of
the system, which is obviously undesirable from a security perspective. To
prevent this situation, the program has path-checking code designed to
prevent users from using the backslash character to traverse backward through
the directory tree and enter other directories.
With the addition of support for the Unicode character set, though, the
complexity of the program continued to increase. Unicode is a double-byte
character set designed to provide characters for every language, including
Chinese and Arabic. By using two bytes for each character instead of just one,
Unicode allows for tens of thousands of possible characters, as opposed to
the few hundred allowed by single-byte characters. This additional complexity
means that there are now multiple representations of the backslash charac-
ter. For example, %5c in Unicode translates to the backslash character, but
this translation was done after the path-checking code had run. So by using
%5c instead of \ , it was indeed possible to traverse directories, allowing
the aforementioned security dangers. Both the Sadmind worm and the
CodeRed worm used this type of Unicode conversion oversight to deface
web pages.
A related example of this letter-of-the-law principle used outside the
realm of computer programming is the LaMacchia Loophole. Just like the
rules of a computer program, the US legal system sometimes has rules that
Search WWH ::




Custom Search