Headline
CVE-2022-2933: 0mk.php in 0mk-shortener/trunk – WordPress Plugin Repository
The 0mk Shortener plugin for WordPress is vulnerable to Cross-Site Request Forgery in versions up to, and including, 0.2. This is due to missing or incorrect nonce validation on the zeromk_options_page function. This makes it possible for unauthenticated attackers to inject malicious web scripts via the ‘zeromk_user’ and ‘zeromk_apikluc’ parameters through a forged request granted they can trick a site administrator into performing an action such as clicking on a link.
Line
1
<?php
2
/*
3
Plugin Name: 0mk Shortener
4
Plugin URI: http://kuzmanov.info/0mk
5
Description: 0.mk Shortener генерира кратка врска за Вашите написи користејќи го македонскиот кратач на врски - Нула[точка]мк.
6
Version: 0.2
7
Author: Boris Kuzmanov
8
Author URI: http://kuzmanov.info
9
*/
10
11
// Функција
12
function zeromk($url) {
13
$korisnik \= get\_option('$zeromk\_user\_op');
14
if ($korisnik \== "") { $korisnik \= '0mkapi'; } // Користи го "0mkapi" ако нема внесено сопствен јузер
15
$apikluc \= get\_option('$zeromk\_apikey\_op');
16
if ($apikluc \== "") { $apikluc \= '1a7854a2226925282e54d1a01af5058c'; } // API клуч за "0mkapi"
17
$nulamk \= file\_get\_contents("http://api.0.mk/v2/skrati?korisnik=".$korisnik."&apikey=".$apikluc."&format=plaintext&link=".$url);
18
return $nulamk;
19
}
20
21
// Креирање на мени
22
add_action('admin_menu’, ‘zeromk_options’);
23
function zeromk_options() {
24
add_options_page('0.mk Поставувања’, '0.mk Поставувања’, 8, __FILE__, ‘zeromk_options_page’);
25
}
26
27
// Зачувување на сетинзите
28
function zeromk_options_page() { ?>
29
<?php
30
$zeromk_options_saved = get_option(‘$zeromk_user_op’);
31
$zeromk_apikey_saved = get_option(‘$zeromk_apikey_op’);
32
if(isset($_POST[‘Submit’])) {
33
$zeromk\_options\_saved \= $\_POST\["zeromk\_user"\];
34
$zeromk\_apikey\_saved \= $\_POST\["zeromk\_apikluc"\];
35
update\_option('$zeromk\_user\_op', $zeromk\_options\_saved);
36
update\_option('$zeromk\_apikey\_op', $zeromk\_apikey\_saved);
37
?>
38
<div class="updated"><p><strong>Поставувањата се зачувани.</strong></p></div>
39
<?php } ?>
40
41
<div class="wrap">
42
43
44
<h2>0.mk Поставувања</h2>
45
<p>Доколку не внесете сопствено корисничко име и API клуч, ќе се користат стандардните поставувања од 0.mk (“0mkapi” и “1a7854a2226925282e54d1a01af5058c”)</p>
46
47
<form method="post" name="options" target="_self">
48
<table>
49
<tr>
50
<td>
51
<td align="left" scope="row">
52
<label>Корисничко име:</label><br />
53
<input name="zeromk_user" value="<?php echo $zeromk_options_saved ?>" /> <br />
54
<label>API клуч:</label><br />
55
<input name="zeromk_apikluc" value="<?php echo $zeromk_apikey_saved ?>" /> <br /><br />
56
</td>
57
</tr>
58
</table>
59
60
<p class="submit">
61
<input name="Submit" type="submit" class="button-primary" value="Зачувај ги промените" />
62
</p>
63
</form>
64
65
</div>
66
<?php
67
}
68
69
// Додавање на кратката врска на крајот од написот
70
add_filter('the_content’, ‘VmetniZeroMk’);
71
72
function VmetniZeroMk($content) {
73
$adresa = zeromk(get_permalink($post->ID));
74
if(is\_single()) {
75
$content.= 'Кратка врска: <a href="'.$adresa.'">'.$adresa.'</a>';
76
}
77
return $content;
78
}
79
?>