Page MenuHomePhabricator

Make IDatabase::makeList safe for phan-taint-check-plugin
Closed, ResolvedPublic

Description

Using 1.3.0.

The following code looks safe but reports issues:
Maybe it is enough to make Title::getArticleID safe, but that looks already returning int

	protected function getNewslettersWithNewsletterMainPage( $newNewsletterName ) {
		$dbr = wfGetDB( DB_REPLICA );

		return $dbr->selectRowCount(
			'nl_newsletters',
			'*',
			$dbr->makeList( [
				'nl_name' => $newNewsletterName,
				$dbr->makeList(
					[
						'nl_main_page_id' => $this->content->getMainPage()->getArticleID(),
						'nl_active' => 1
					], LIST_AND )
			], LIST_OR )
		);
	}
<?xml version="1.0" encoding="ISO-8859-15"?>
<checkstyle version="6.5">
  <file name="./includes/content/NewsletterDataUpdate.php">
    <error line="31" severity="error" message="Calling method \Wikimedia\Rdbms\Database::selectRowCount() in \NewsletterDataUpdate::getNewslettersWithNewsletterMainPage that outputs using tainted argument $[arg #3]. (Caused by: ../../includes/Title.php +3535; ../../includes/Title.php +3528; ../../includes/Title.php +3532)" source="SecurityCheck-SQLInjection"/>
  </file>
</checkstyle>

Event Timeline

Change 457879 had a related patch set uploaded (by Brian Wolff; owner: Brian Wolff):
[mediawiki/tools/phan/SecurityCheckPlugin@master] Support custom checking for IDatabase::makeList

https://gerrit.wikimedia.org/r/457879

Change 457879 merged by jenkins-bot:
[mediawiki/tools/phan/SecurityCheckPlugin@master] Support custom checking for IDatabase::makeList

https://gerrit.wikimedia.org/r/457879

It seems like there is still a problem when using things like $dbr->makeList( [ 'foo' => [ $evil1, $evil2 ] ], LIST_AND ); which should be safe (See Block.php in core.

Change 458487 had a related patch set uploaded (by Brian Wolff; owner: Brian Wolff):
[mediawiki/tools/phan/SecurityCheckPlugin@master] Fix IN list case for db conds when doing $conds['field'][] = $tainted

https://gerrit.wikimedia.org/r/458487

Change 458487 merged by jenkins-bot:
[mediawiki/tools/phan/SecurityCheckPlugin@master] Fix IN list case for db conds when doing $conds['field'][] = $tainted

https://gerrit.wikimedia.org/r/458487

Bawolff claimed this task.
sbassett triaged this task as Medium priority.Oct 15 2019, 7:24 PM