Taint checking is a feature in some
computer programming
Computer programming or coding is the composition of sequences of instructions, called computer program, programs, that computers can follow to perform tasks. It involves designing and implementing algorithms, step-by-step specifications of proc ...
languages
Language is a structured system of communication that consists of grammar and vocabulary. It is the primary means by which humans convey meaning, both in spoken and signed forms, and may also be conveyed through writing. Human language is ch ...
, such as
Perl
Perl is a high-level, general-purpose, interpreted, dynamic programming language. Though Perl is not officially an acronym, there are various backronyms in use, including "Practical Extraction and Reporting Language".
Perl was developed ...
,
Ruby
Ruby is a pinkish-red-to-blood-red-colored gemstone, a variety of the mineral corundum ( aluminium oxide). Ruby is one of the most popular traditional jewelry gems and is very durable. Other varieties of gem-quality corundum are called sapph ...
or
Ballerina
A ballet dancer is a person who practices the art of classical ballet. Both females and males can practice ballet. They rely on years of extensive training and proper technique to become a part of a professional ballet company. Ballet dancer ...
designed to increase security by preventing malicious users from executing commands on a host computer. Taint checks highlight specific security risks primarily associated with web sites which are attacked using techniques such as
SQL injection
In computing, SQL injection is a code injection technique used to attack data-driven applications, in which malicious SQL statements are inserted into an entry field for execution (e.g. to dump the database contents to the attacker). SQL injec ...
or
buffer overflow attack approaches.
Overview
The concept behind taint checking is that any variable that can be modified by an outside user (for example a variable set by a field in a
web form) poses a potential security risk. If that
variable is used in an expression that sets a second variable, that second variable is now also suspicious. The taint checking tool can then proceed variable by variable forming a list of variables which are potentially influenced by outside input. If any of these variables is used to execute dangerous commands (such as direct commands to a SQL database or the host computer
operating system
An operating system (OS) is system software that manages computer hardware and software resources, and provides common daemon (computing), services for computer programs.
Time-sharing operating systems scheduler (computing), schedule tasks for ...
), the taint checker warns that the program is using a potentially dangerous tainted variable. The computer programmer can then redesign the program to erect a safe wall around the dangerous input.
Taint checking may be viewed as a conservative approximation of the full verification of
non-interference or the more general concept of
secure information flow. Because information flow in a system cannot be verified by examining a single execution trace of that system, the results of taint analysis will necessarily reflect approximate information regarding the information flow characteristics of the system to which it is applied.
Example
The following dangerous
Perl
Perl is a high-level, general-purpose, interpreted, dynamic programming language. Though Perl is not officially an acronym, there are various backronyms in use, including "Practical Extraction and Reporting Language".
Perl was developed ...
code opens a large
SQL injection
In computing, SQL injection is a code injection technique used to attack data-driven applications, in which malicious SQL statements are inserted into an entry field for execution (e.g. to dump the database contents to the attacker). SQL injec ...
vulnerability by not checking the value of the
$name
variable:
#!/usr/bin/env perl
my $name = $cgi->param("name"); # Get the name from the browser
...
$dbh-> = 1;
$dbh->execute("SELECT * FROM users WHERE name = '$name';"); # Execute an SQL query
If taint checking is turned on, Perl would refuse to run the command and exit with an error message, because a tainted variable is being used in a SQL query. Without taint checking, a user could enter
foo'; DROP TABLE users --
, thereby running a command that deletes the entire database table. Much safer would be to encode the tainted value of $name to a SQL
string literal
string literal or anonymous string is a literal for a string value in the source code of a computer program. Modern programming languages commonly use a quoted sequence of characters, formally "bracketed delimiters", as in x = "foo", where , "foo ...
and use the result in the SQL query, guaranteeing that no dangerous command embedded in
$name
will be evaluated. Another way to achieve that is to use a
prepared statement to sanitize all variable input for a query.
One thing to note is that
Perl DBI requires one to set the
TaintIn
attribute of a database handle ''as well as'' enabling taint mode to check one's SQL strings.
History
Perl supported tainting in
setuid scripts from at least version 3.0 (released in 1989),
though it was not until version 5.0 (released in 1994)
that the
-T
switch
was introduced integrating tainting into a single runtime.
In 1996,
Netscape
Netscape Communications Corporation (originally Mosaic Communications Corporation) was an American independent computer services company with headquarters in Mountain View, California, and then Dulles, Virginia. Its Netscape web browser was o ...
implemented data tainting for
JavaScript
JavaScript (), often abbreviated as JS, is a programming language and core technology of the World Wide Web, alongside HTML and CSS. Ninety-nine percent of websites use JavaScript on the client side for webpage behavior.
Web browsers have ...
in Netscape Navigator 3.
However, since support was considered experimental, it shipped disabled (requiring user intervention to activate) and required page authors to modify scripts to benefit from it. Other browser vendors never implemented the functionality.
References
External links
Guidelines from the W3C about taint-checking CGI scripts- Perl security documentation
{{DEFAULTSORT:Taint Checking
Static program analysis
Computer programming