AI机票预订助手
Analysis
The skill matches its flight-booking purpose, but it can change real bookings and handles travel credentials and personal data in ways that need careful review.
Findings (5)
Artifact-based informational review of SKILL.md, metadata, install specs, static scan signals, and capability signals. ClawScan does not execute the skill or run runtime probes.
Checks for instructions or behavior that redirect the agent, misuse tools, execute unexpected code, cascade across systems, exploit user trust, or continue outside the intended task.
for passenger in passenger_list:
product_id = passenger.get("productId", "")
if product_id:
product_id_list.append(product_id)
...
product_ids = ",".join(product_id_list)
...
response = refund_apply(order_id, product_ids, refund_amount)The refund script gathers all passenger ticket product IDs from an order and submits a refund request once invoked, without an in-script final confirmation or passenger-level scoping.
print(f"乘客姓名: {passenger_name}")
print(f"乘客手机号: {passenger_phone}")
print(f"乘客证件号: {passenger_id}")The script prints full passenger PII to stdout during order creation, despite the skill documentation telling users not to expose personal information in logs or replies.
Checks whether tool use, credentials, dependencies, identity, account access, or inter-agent boundaries are broader than the stated purpose.
def get_auth_file_path():
# 使用临时目录下的文件(避免权限问题)
return get_temp_file_path(".fbt_auth.json")
...
"apiKey": api_key,
"phone": phone,
"auth_time": datetime.now().isoformat(),
"expire_days": 90A reusable account apiKey and phone number are persisted for 90 days in a temporary-directory file, and later calls automatically load and use that apiKey.
Checks for exposed credentials, poisoned memory or context, unclear communication boundaries, or sensitive data that could leave the user's control.
return os.environ.get("FBT_API_URL", "https://app-gate.fenbeitong.com/air_biz/skill/execute")
...
context = ssl._create_unverified_context()
with urllib.request.urlopen(req, context=context) as response:All API calls can be redirected by an undeclared environment variable and are made with certificate verification disabled, while the payloads include apiKey and booking/PII data.
seat_items_file = get_temp_file_path("flight_seat_items.json")
...
for item in seat_items:
if item.get("display_index") == seat_index_int:
seat_item = item
breakOrder creation trusts a generic temporary file of prior seat results and maps the user's selected number to that stored data, without binding it to a session, user, route, or order.
