[prev in list] [next in list] [prev in thread] [next in thread]
List: full-disclosure
Subject: [Full-Disclosure] MyNewsGroups :) XSS patch
From: Ulf Harnhammar <ulfh () update ! uu ! se>
Date: 2002-09-29 23:05:39
[Download RAW message or body]
MyNewsGroups :) XSS patch
PROGRAM: MyNewsGroups :)
VENDOR: Carlos Sanchez Valle et al.
HOMEPAGE: http://mynewsgroups.sourceforge.net/
VULNERABLE VERSIONS: 0.4, 0.4.1, possibly others
IMMUNE VERSIONS: 0.4.1 with my patch applied
SEVERITY: high
LOGIN REQUIRED: no
DESCRIPTION:
"MyNewsGroups :) is a USENET news client with a completely Web-based
interface. It is written in PHP4, and it uses a MySQL database
backend, which allows useful tools such as search engines, SPAM
filters, subscriptions, and stats to be implemented. The interface
of MyNewsGroups :) is very easy to use."
(direct quote from the program's project page at Freshmeat)
The program is published under the terms of the GNU General Public
License.
SUMMARY:
MyNewsGroups :) has got several cross-site scripting holes that are
triggered when displaying the Subject headers of newsgroup messages.
By posting a malicious newsgroup message, an attacker can take over
many MyNewsGroups :) users' accounts. The same attacker can also
trick the program into posting fake messages under the users' names.
COMMUNICATION WITH VENDOR:
The vendor was contacted on the 9th of July. They still haven't
fixed this issue.
MY PATCH:
I wrote a patch for this XSS issue, and I have included it as an
attachment to this mail. I have patched against version 0.4.1.
// Ulf Harnhammar
VSU Security
ulfh@update.uu.se
["mynewsgroups.patch" (TEXT/PLAIN)]
--- myng/dev/myarticles.php.old Fri Sep 27 00:00:58 2002
+++ myng/dev/myarticles.php Fri Sep 27 00:01:24 2002
@@ -126,7 +126,7 @@
$t->set_var("date",$date);
$t->set_var("id_article",$db->Record['id_article']);
$t->set_var("sender",$db2->Record['name']);
- $t->set_var("subject",$db2->Record['subject']);
+ $t->set_var("subject",htmlspecialchars($db2->Record['subject']));
$group_url = \
"tree.php?group_name=".rawurlencode(real2table($db->Record['group_name']))."&begin=0&server=".rawurlencode($db->Record['server']);
$t->set_var("group_url",$group_url);
--- myng/dev/search.php.old Fri Sep 27 00:03:14 2002
+++ myng/dev/search.php Fri Sep 27 00:03:56 2002
@@ -97,7 +97,7 @@
$t->set_var("date",$date);
$article_url = \
"article.php?id_article=".rawurlencode($db->Record['id'])."&group_name=".$db->Record['newsgroup'];
$t->set_var("article_url",$article_url);
- $t->set_var("subject",$db->Record['subject']);
+ $t->set_var("subject",htmlspecialchars($db->Record['subject']));
$t->set_var("sender",$db->Record['name']);
$t->set_var("group",$db->Record['newsgroup']);
$t->set_var("readings",$db->Record['num_readings']);
@@ -173,7 +173,7 @@
$t->set_var("date",$date);
$article_url = \
"article.php?id_article=".rawurlencode($db->Record['id'])."&group_name=".$db->Record['newsgroup'];
$t->set_var("article_url",$article_url);
- $t->set_var("subject",$db->Record['subject']);
+ \
$t->set_var("subject",htmlspecialchars($db->Record['subject']));
$t->set_var("sender",$db->Record['name']);
$t->set_var("group",$db->Record['newsgroup']);
$t->set_var("readings",$db->Record['num_readings']);
--- myng/dev/stats.php.old Fri Sep 27 00:05:14 2002
+++ myng/dev/stats.php Fri Sep 27 00:06:40 2002
@@ -205,7 +205,7 @@
while($db2->next_record()){
$num_replies[$j][0] = $db2->Record[1];
- $num_replies[$j][1] = $db2->Record['subject'];
+ $num_replies[$j][1] = htmlspecialchars($db2->Record['subject']);
$j ++;
}
@@ -246,7 +246,7 @@
$db2->query($consulta2);
while($db2->next_record()){
$num_readings[$j][0] = $db2->Record['num_readings'];
- $num_readings[$j][1] = $db2->Record['subject'];
+ $num_readings[$j][1] = htmlspecialchars($db2->Record['subject']);
$j ++;
}
--- myng/dev/lib/standard.lib.php.old Thu Sep 26 23:54:04 2002
+++ myng/dev/lib/standard.lib.php Thu Sep 26 23:58:13 2002
@@ -577,7 +577,7 @@
$li_image = "li".$li_number.$color.".gif";
- $linea2 = $linea."<img src=images/".$li_image." width=5 \
height=5> "."<a class=text \
href=article.php?id_article=".rawurlencode($db->Record['id'])."&group_name=".rawurlencode($group_name).">".$db->Record['subject']."</a>";
+ $linea2 = $linea."<img src=images/".$li_image." width=5 \
height=5> "."<a class=text \
href=article.php?id_article=".rawurlencode($db->Record['id'])."&group_name=".rawurlencode($group_name).">".htmlspecialchars($db->Record['subject'])."</a>";
$reply_url = \
"post.php?type=reply&id=".$db->Record['number']."&group=".$group_name; //echo $reply_url;
@@ -674,7 +674,7 @@
$db->query($consulta);
$db->next_record();
- $url_subject = "<a class=text \
href=article.php?id_article=".rawurlencode($db->Record['id'])."&group_name=".$group_name.">".$db->Record['subject']."</a>";
+ $url_subject = "<a class=text \
href=article.php?id_article=".rawurlencode($db->Record['id'])."&group_name=".$group_name.">".htmlspecialchars($db->Record['subject'])."</a>";
$t->set_var("p_subject",$url_subject);
$c->username = $db->Record['username'];
$c->email = $db->Record['from_header'];
_______________________________________________
Full-Disclosure - We believe in it.
Charter: http://lists.netsys.com/full-disclosure-charter.html
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic