RT 4.0.22
[freeside.git] / rt / t / security / CVE-2011-2084-attach-tickets.t
1 use strict;
2 use warnings;
3
4 use RT::Test tests => undef;
5
6 my $user = RT::Test->load_or_create_user(
7     Name            => 'user',
8     EmailAddress    => 'user@example.com',
9     Privileged      => 1,
10     Password        => 'password',
11 );
12
13 ok(
14     RT::Test->set_rights(
15         { Principal => 'Everyone',  Right => [qw/CreateTicket/] },
16         { Principal => 'Requestor', Right => [qw/ShowTicket/] },
17     ),
18     'set rights'
19 );
20
21 my $secret = "sekrit message";
22
23 RT::Test->create_tickets(
24     {},
25     {
26         Subject     => 'ticket A',
27         Requestor   => $user->EmailAddress,
28         Content     => "user's ticket",
29     },
30     {
31         Subject     => 'ticket B',
32         Requestor   => 'root@localhost',
33         Content     => $secret,
34     },
35 );
36
37 my $ticket_b = RT::Test->last_ticket;
38
39 my ($baseurl, $m) = RT::Test->started_ok;
40 ok $m->login( 'user', 'password' ), 'logged in as user';
41
42 $m->get_ok("$baseurl/Ticket/Display.html?id=" . $ticket_b->id);
43 $m->content_contains('No permission');
44 $m->warning_like(qr/no permission/i, 'no permission warning');
45
46 RT::Test->clean_caught_mails;
47
48 # Ticket Create is just one example of where this is vulnerable
49 $m->get_ok('/Ticket/Create.html?Queue=1');
50 $m->submit_form_ok({
51     form_name   => 'TicketCreate',
52     fields      => {
53         Subject         => 'ticket C',
54         AttachTickets   => $ticket_b->id,
55     },
56 }, 'create a ticket');
57
58 my @mail = RT::Test->fetch_caught_mails;
59 ok @mail, "got some outgoing emails";
60 unlike $mail[0], qr/\Q$secret\E/, "doesn't contain ticket user can't see";
61
62 undef $m;
63 done_testing;
64